【发布时间】:2014-07-13 07:37:41
【问题描述】:
我正在查看一些程序集,我看到了这条线
CMP ECX, ECX
这对我来说没有意义,因为它不总是正确的 A==A 吗? (自反性质)
不确定这是否会有所帮助,但在这种情况下使用它:
CPU Disasm
Address Hex dump Command Comments
00414A24 |. 39C9 CMP ECX,ECX
00414A26 |. F3:A6 REPE CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
00414A28 |. 0F92C0 SETB AL
00414A2B |. 0F97C2 SETA DL
00414A2E |. 28C2 SUB DL,AL
00414A30 |. 0FBEC2 MOVSX EAX,DL
【问题讨论】:
-
我唯一的猜测是可能重置 0 标志?但我不完全明白这对这里有什么帮助
-
考虑一下如果你省略了
cmp ecx, ecx和ecx恰好为零会发生什么。 -
´rep´ 和
loop指令先递减ecx,然后检查标志。 -
您能否给出更完整的答案作为解决方案?我将能够接受它作为一种解决方案并更好地理解(我可以称之为循环对吗?)循环。 SETA 和 SETB 也有点令人困惑,并且可以真正使用您在此 sn-p 上拥有的所有信息。