首页
社区
课程
招聘
[旧帖] [求助]计算字符串长度 0.00雪花
发表于: 2013-12-28 21:33 1783

[旧帖] [求助]计算字符串长度 0.00雪花

2013-12-28 21:33
1783
看到了这样一段代码.strlen()在优化编译模式下的汇编代码:
mov ecx, FFFFFFFF
sub eax, eax
repnz
scasb
not ecx
dec ecx
je XXXXXXX
请问repnz和scasb结合起来是什么意思,看注释完全看不懂,希望大神能为我一句一句解释,小弟跪谢了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mov ecx, FFFFFFFF ;向ECX填充FFFFFFFF,计数初始化
sub eax, eax ;EAX清零 AH AL 也是0
repnz ;这两句是合在一起的,REPNZ 是不等于重复,SCASB是比较DI指向的内存单元和AL内容
scasb ;此时AL为0,如果找到了字符串结束符 00H 就往下走否则重复,每重复一次ECX减一,计数
not ecx; 取反,让计数变为正数
dec ecx; 减去多计算的一位
je XXXXXXX; 如果计数为0,即字符串长度为0...吧啦吧啦
2013-12-29 18:10
0
雪    币: 1555
活跃值: (3103)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
3
重复前缀的说明

格式: REP           ;CX<>0 重复执行字符串指令
      REPZ/REPE     ;CX<>0 且ZF=1重复执行字符串指令
      REPNZ/REPNE   ;CX<>0 且ZF=0重复执行字符串指令

说明:

1. REPZ/REPE常用与CMPS串操作指令结合使用, 可以完成两组字符串的比较.

2. REPZ/REPE常与SCAS指令结合使用,可以完成在一个字符串中搜索一个关键字.

3. REPNZ/REPNE与CMPS指令结合使用,表示当串未结束(CX=1)且当对应串元素不相同(ZF=0)时,继续重复执行串比较指令.

4. REPNZ/REPNE与SCAS指令结合使用,表示串未结束(CX=1)且当关键字与串元素不相同(ZF=0)时,继续重复执行串搜索指令.
2013-12-29 20:16
0
雪    币: 1555
活跃值: (3103)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
4
字符串搜索指令 SCAS

格式: SCAS OPRD
      SCASB
      SCASW

功能: 把AL(字节串)或AX(字串)的内容与由DI寄存器寻址的目的串中的数据相减,结果置标志位,但不改变任一操作数本身.
说明:

1. 其中OPRD为目的串符号地址.

2. 本指令影响标志AF、CF、OF、PF、SF、ZF.该指令可查找字符串中的一个关键字,只需在本指令执行前,

   把关键字放在AL(字节)或AX(字串 )中,用重复前缀可在整串中查找.
     
   指令中不使用操作数时,可用指令格式SCASB,SCASW,分别表示字节串或字串搜索指令.
2013-12-29 20:19
0
雪    币: 1555
活跃值: (3103)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
5
引用,汇编指令助手v1.1 你可以下载一个,里面的知识应该能引导你,自主理解汇编
2013-12-29 20:20
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
非常感谢!
2013-12-30 11:58
0
游客
登录 | 注册 方可回帖
返回
//