我正在尝试理解“ rep scasb字节[edi]”指令

时间:2019-09-26 16:25:02

标签: assembly x86

在此语句中,edi指向的值是逐字节比较与eax指向的值的吗?

rep scasb byte [edi]

我希望你们每个人都有美好的一天或一天​​的结束,谢谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

请参见https://www.felixcloutier.com/x86/scas:scasb:scasw:scasdhttps://www.felixcloutier.com/x86/rep:repe:repz:repne:repnz

但是请注意,rep scasb无法编码

对于scasb,两个rep前缀是 reperepne 。前缀字节表示repstos / movs意味着repescascmps

当ECX!= 0和ZF == 1时,REPE不断重复。即在相等时重复。

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

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

答案 1 :(得分:1)

rep表示重复直到ecx为0。scasb表示“扫描字节”,即:比较al与存储位置edi的字节,递增edi和递减ecx
实际上,这意味着在运行此行之前,ecx已设置为一个值,该值指示rep将运行多少次,以及字符是否与零标志ZF相匹配。 (也用于确定相等性,因此jejz为何相等)。