首页
社区
课程
招聘
[旧帖] [求助]repnz scasb的理解 0.00雪花
发表于: 2011-1-25 17:12 3009

[旧帖] [求助]repnz scasb的理解 0.00雪花

2011-1-25 17:12
3009
在下在看罗云彬的win32汇编

遇到repnz   scasb这条指令看不懂,之前看过王爽的书了。
在网上搜索也没能理解。

能否帮助我理解这条指令呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
根据上下文理解,是
从edi开始的字节 和 eax 相比,如果相等,零标志位1,停止对比。不等edi+2,继续对比,ecx保存对比的长度

如果是scasd,后面是D,双字对比,不等则edi+4

现在只是知道这些
2011-1-25 17:38
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哦 如果是scasb,应该是edi+1
2011-1-25 17:42
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
repnz指令循环执行特定搭配的指令,直到zf标志位置位或ecx为0,才退出循环执行。
scasb/scasw/scasd指令是串比较指令,它的作用是将[edi]中的数据以byte/word/dword类型和al/ax/eax进行比较。并edi+1/edi+2/edi+4。如果[edi]中的数据和al/ax/eax相等,则zf标志位置位。
一般来说,这个指令比较常用来计算某串字符串的长度而使用得多。如下例子代码用repnz scasb计算某串字符串的长度:
mov edi,offset lpszString
mov ecx,-1
xor eax,eax
repnz scasb
not ecx
dec ecx  ;当代码执行到这一行时,ecx==lpszString字符串的长度。
2011-1-25 17:57
0
雪    币: 350
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
跟版主复习。

mov     edi, offset lpszString         
or      ecx, FFFFFFFF               
xor     eax, eax      
repnz   scasb  
not     ecx                                 
dec     ecx     

字符串地址送EDI,ECX置F,EAX清零,AL作为终止条件.
循环按字节扫描,遇AL中条件停止.ECX取反,所得为待扫描字符串所
含字节数加1. 最后减1,即为待检测字符串字符数.
2011-1-25 19:18
0
雪    币: 277
活跃值: (45)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
repnz   scasb   在执行过程中ecx会随着比较 不断的减1吧?
2011-1-25 20:22
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=小虾;919253]repnz指令循环执行特定搭配的指令,直到zf标志位置位或ecx为0,才退出循环执行。
scasb/scasw/scasd指令是串比较指令,它的作用是将[edi]中的数据以byte/word/dword类型和al/ax/eax进行比较。并edi+1/edi+2/edi+4。如果[edi]中的数据和...[/QUOTE]

讲的非常详细,对我来说很重要!致谢一下小虾版主
顺便复习一下你下面的例子
mov edi,offset lpszString        ;譬如字符串是‘abc’
mov ecx,-1                               ;ecx=-1
xor eax,eax                               ;eax=0
repnz scasb                              ;三个字符,每次ecx都-1所以ecx=-4
not ecx                                     ;1111 1011b取反0000 0100b    现在ecx=4
dec ecx  ;当代码执行到这一行时,ecx==lpszString字符串的长度。

最后4-1,所以字符串长度为3

是这样吧?
2011-1-25 22:10
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
8
是的。。。。
2011-1-26 09:50
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢!
目前正在努力学习中
2011-1-26 10:09
0
雪    币: 58
活跃值: (76)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
10
谢谢版主,对我很有帮助。
2017-11-29 20:34
0
游客
登录 | 注册 方可回帖
返回
//