#1 楼
SCAS
指令用于扫描字符串(SCAS
= SCan A String)。它将累加器的内容(AL
,AX
或EAX
)与ES:[EDI]
指向的当前值进行比较。搜索等于累加器中值的第一个字符串元素。 英特尔手册(第1卷,第231页)说:
SCAS指令从EAX,AX的内容中减去目标字符串元素或AL寄存器(取决于操作数长度)并根据结果更新状态标志。字符串元素和寄存器内容未修改。 SCAS指令的以下“短格式”指定操作数长度:SCASB(扫描字节串),SCASW(扫描字串)和SCASD(扫描双字串)。基本上,此指令扫描字符串并寻找与存储在
REPNE
中的字符相同的字符。它不会触摸除ECX(计数器)和EDI(地址)以外的任何寄存器,而是根据结果显示状态标志。
评论
EAX指向的值还是EAX的值?另外,它会更新哪些累加器? REPNE SCAS应该如何处理?
–aclowkay
2013年9月9日20:43
EAX的值,由ES:[EDI]指出。字符串与累加器中存储的字符不同的地址是当前存储在ES:[EDI]中的地址。
–恐怖
2013年9月9日在21:14
在找到与EAX匹配的值之前,不应该重复REPNE SCAS吗?因此,我认为应该是“寻找与EAX中存储的字符相同的字符”?
–user2797
2013年9月10日下午3:36
@guestme:是的。抱歉,我确实写了与我相反的意思。我编辑文本。
–恐怖
2013年9月10日在12:45
@dnivra:但这还不是全部。具体来说,repnz scasb与memchr()等效。
–彼得·弗里
2013年9月11日17:36