在此语句中,edi
指向的值是逐字节比较与eax
指向的值的吗?
rep scasb byte [edi]
我希望你们每个人都有美好的一天或一天的结束,谢谢您的帮助:)
答案 0 :(得分:2)
请参见https://www.felixcloutier.com/x86/scas:scasb:scasw:scasd和https://www.felixcloutier.com/x86/rep:repe:repz:repne:repnz。
但是请注意,rep scasb
无法编码。
对于scasb
,两个rep
前缀是 repe
和repne
。前缀字节表示rep
与stos
/ movs
意味着repe
与scas
和cmps
。
当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
相匹配。 (也用于确定相等性,因此je
和jz
为何相等)。