在JNE声明之前没有CMP指令时意味着什么?
0x0000000000401114 <+64>: add %eax,%ecx
0x0000000000401116 <+66>: cltq
0x0000000000401118 <+68>: mov 0x4026e0(,%rax,4),%eax
0x000000000040111f <+75>: sub $0x1,%edx
0x0000000000401122 <+78>: jne 0x401114 <phase_5+64>
我在比较什么?
答案 0 :(得分:2)
cmp edx, 1
更改标记与sub edx, 1
完全相同,只是它不会更新edx
。这意味着您无需在循环中执行cmp
和sub
,而只需执行sub
答案 1 :(得分:1)
JNE
指令用于测试和跳转
SUB
指令会将ZF标志设置为1,否则为0
答案 2 :(得分:1)
SUB(与大多数x86整数指令一样)根据结果设置标志,即如果EDX变为零,则设置ZF。
你的反汇编程序将助记符显示为JNE,但JNZ同义词有the more appropriate semantic meaning here,因为你真的更关心在SUB之后EDX变为零。
更容易将其视为与1的比较,而不是将其作为的底部
do {} while(--edx);
loop,强>