能力值:
( LV2,RANK:10 )
|
-
-
2 楼
根据上下文理解,是
从edi开始的字节 和 eax 相比,如果相等,零标志位1,停止对比。不等edi+2,继续对比,ecx保存对比的长度
如果是scasd,后面是D,双字对比,不等则edi+4
现在只是知道这些
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
哦 如果是scasb,应该是edi+1
|
能力值:
(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字符串的长度。
|
能力值:
( 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,即为待检测字符串字符数.
|
能力值:
( LV5,RANK:60 )
|
-
-
6 楼
repnz scasb 在执行过程中ecx会随着比较 不断的减1吧?
|
能力值:
( 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
是这样吧?
|
能力值:
(RANK:410 )
|
-
-
8 楼
是的。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢!
目前正在努力学习中
|
能力值:
( LV6,RANK:80 )
|
-
-
10 楼
谢谢版主,对我很有帮助。
|
|
|