repne scasb指令,用于扫描字符串,计算字符串的长度,如下两条指令:
cld
repne scasb
对应的等价指令是:
scans:inc edi
    dec ecx
    je loopdone
    cmp byte [edi-1],al
    jne scans
loopdone:
下面看一个示例程序:

section .dataEditBuff: db 'abcdefghijklm#',10BUFFERLEN equ $-EditBuffFILLCHR     equ 35 ;'#'section .textWriteStr:push eax       ; Save pertinent registerspush ebxmov eax,4     ; Specify sys_write callmov ebx,1       ; Specify File Descriptor 1: Stdoutint 80H          ; Make the kernel callpop ebx           ; Restore pertinent registerspop eaxret         ; Go homeglobal _start
_start:nopmov ecx,EditBuff      mov edx,BUFFERLEN   call WriteStrcldmov al, FILLCHRmov edi,EditBuff mov ecx,0000ffffh   repne scasbmov byte [edi-1], '$'mov ecx,EditBuff      mov edx,BUFFERLEN   call WriteStrExit:  mov eax,1       ; Code for Exit Syscallmov ebx,0        ; Return a code of zero int 80H         ; Make kernel call

程序分析:
cld //控制edi指向的字符串地址变化方向是从低到高
 mov al, FILLCHR  //al=’#’
 mov edi,EditBuff  //edi= EditBuff
 mov ecx,0000ffffh //ecx=65535
 repne scasb //扫描edi指向的字符串,扫描方向从低位地址向高位地址,如果遇到字节等于al或者ecx计数为0,则结束扫描。
 mov byte [edi-1], '$' //因为每次循环都会把edi加1,因此edi-1才是等于al那个字节(对于本例ecx肯定不会为0)。所以本条指令会把’#’替换成’$’。

makefile文件内容:

scasbdemo: scasbdemo.old -o scasbdemo scasbdemo.o
scasbdemo.o: scasbdemo.asmnasm -f elf -g -F stabs scasbdemo.asm -l scasbdemo.lst

测试:

[root@bogon scasbdemo]# make
nasm -f elf -g -F stabs scasbdemo.asm -l scasbdemo.lst
ld -o scasbdemo scasbdemo.o
[root@bogon scasbdemo]# ./scasbdemo
abcdefghijklm#
abcdefghijklm$

32位汇编语言学习笔记(36)--repne scasb指令相关推荐

  1. windows下32位汇编语言学习笔记

    windows下32位汇编语言学习笔记 第一章  第一章 背景知识 80x86处理器的存储器 4个数据寄存器 EAX,EBX,ECX,EDX EAX寄存器 所有API函数的返回值都保存在EAX里,注意 ...

  2. 32位汇编语言学习笔记(45)--测试简单文件操作接口(完)

     这是<Assembly Language step by step programming with linux>书中的最后一个程序,也是全书中的最复杂的一个程序. 首先看一下这个程 ...

  3. 32位汇编语言学习笔记(43)-- 生成随机数

     此程序出自<Assembly Language step by step programming with linux>第12章,用于演示随机数函数的使用,共涉及两个随机数函数: v ...

  4. 32位汇编语言学习笔记(33)--aaa指令

     aaa(ASCII adjust after addition)指令,是BCD指令集中的一个指令,用于在两个未打包的BCD值相加后,调整al和ah寄存器的内容. BCD(Binary-coded ...

  5. 16位汇编语言学习笔记(2)—— 汇编程序设计

    文章目录 4. 顺序程序设计 4.1 十进制的算数运算 4.2 输入输出功能调用 4.3 综合案例 5. 分支程序设计 5.1 转移指令 5.1.1 条件转移指令 单标志条件转移指令 无符号数专用条件 ...

  6. 汇编语言学习笔记(十二)-浮点指令

    浮点数如何存储 浮点寄存器 浮点数指令 浮点计算例子 浮点高级运算 CMOV移动指令 浮点数如何存储 浮点数的运算完全不同于整数,从寄存器到指令,都有一套独特的处理流程,浮点单元也称作x87 FPU. ...

  7. 16位汇编语言学习笔记(1)——基础知识

    文章目录 1.配置汇编学习环境 1.1 工具下载 1.2 配置环境 2. 汇编命令基础 2.1 简单使用 2.2 常用命令 3. 汇编语言基础 3.1 汇编语言程序与汇编程序 3.2 汇编语言程序的格 ...

  8. 琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记

    琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记 2011年12月20日 基础篇 第1章 背景知识 1 1.1 Win32的软硬件平台 1.1.1 80x86系列处理器简史 1.1 ...

  9. Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)

    Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(畅销10年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 75 ...

最新文章

  1. linux系统-软链接与硬链接区别
  2. CSS之深入理解 flex 布局以及计算
  3. 为什么程序员总是打扮成这样一幅鬼样子
  4. 《深入浅出DPDK》读书笔记(九):流分类与多队列、流过滤、虚拟化流分类方式、流分类技术的使用
  5. tl r402路由器设置_tp-link TL-WR700N 迷你型路由器设置记录
  6. java中阻止类的继承
  7. Tomcat 启动报does not exist or is not a readable directory错误,修改配置文件
  8. 京东h5移动端适配(REM)
  9. Nginx(九):Nginx网页压缩技术
  10. Qt实现双击可编辑的QLabel,输入文本后回车确定
  11. 批处理修改计算机名为ip,批处理修改计算机名和IP地址
  12. outlook邮箱邮件大小限制_outlook邮箱附件大小限制怎么办_outlook超出邮箱附件大小限制如何处理-win7之家...
  13. SMB服务搭建与访问
  14. 江苏金丰机电有限公司参观考察
  15. java.util.list源码_关于fest-util源码包Collections集合工具类过滤、判空、格式化及复制克隆处理...
  16. 马云布局大阿里蓝图:美好但需跋涉
  17. id 查找apple_厉害!竟能利用苹果ID锁找回丢失手机?
  18. Oss endpoint can‘t be empty.
  19. 手把手教你如何远程连接云服务器(图文教程)?
  20. EO-88遥测信号接收教程

热门文章

  1. 悼念乔布斯---他的产品改变了世界,思想影响了一代人,三个故事,勉励大家
  2. IDEA报错 module java.base does not “opens java.lang.invoke“
  3. 第四周 Java语法总结_内部类_常用类_getclass_toStrong_equals_clone_Scanner_String_StringBuffer_Integer_集合_插入排序
  4. 【LeetCode刷题日记】常用算法基础和理解及运用
  5. 用Easyui写一个银行个人存款计算器(纯前端页面)
  6. 为什么选择紫外光固化修复管道?
  7. esp32之wifi状态机
  8. 10.设计模式之桥接模式
  9. NginxKeepalived 实现高可用
  10. 体会Linux与生俱来的美 初级篇  走进Linux 操作系统