Assembly I';I’我在努力理解;rep scasb字节[edi]”;指示

Assembly I';I’我在努力理解;rep scasb字节[edi]”;指示,assembly,x86,Assembly,X86,在该语句中,edi指向的值是否与eax指向的值逐字节进行比较 rep scasb byte[edi]rep表示重复,直到ecx为0scasb表示“扫描字节”,即:将al与内存位置的字节edi、增量edi和减量ecx 这实际上意味着,在运行此行之前,ecx已设置为一个值,该值指示rep将运行多少次,以及字符是否匹配零标志ZF(这也用于确定相等性,因此为什么je和jz是等效的)将设置。请参见和 但请注意,rep scasb不可编码 对于scasb,两个rep前缀是repe和repne。前缀字节表示r

在该语句中,
edi
指向的值是否与
eax
指向的值逐字节进行比较


rep scasb byte[edi]
rep
表示重复,直到
ecx
为0
scasb
表示“扫描字节”,即:将
al
与内存位置的字节
edi
、增量
edi
和减量
ecx

这实际上意味着,在运行此行之前,
ecx
已设置为一个值,该值指示
rep
将运行多少次,以及字符是否匹配零标志
ZF
(这也用于确定相等性,因此为什么
je
jz
是等效的)将设置。请参见和

但请注意,
rep scasb
不可编码

对于
scasb
,两个
rep
前缀是
repe
repne
。前缀字节表示
rep
stos
/
movs
表示
repe
cmps

当ECX运行时,REPE不断重复=0和ZF==1。i、 e.平等地重复

repne scasb
实现
memchr
:在固定大小的缓冲区中查找第一个匹配项(如果有)

repe scasb
查找第一个字节!=AL,或在ECX设置的限制处停止。所以它有点像strspn,但仍然是一个显式大小的缓冲区,而不是以零结尾的C字符串。

“eax指向的值”这里没有eax指向的值
SCASB
al
中的值与
edi
给定地址处内存中的值进行比较。我建议您购买Intel的x86手册,因为它包含对所有指令的非常全面的描述。