可能是重复问题:
x86汇编 - 使用'testl'检查eax是否等于eax?
我非常非常新手汇编语言编程,并且目前正在尝试阅读从二进制文件生成的汇编语言。 我遇到了以下代码:
test %eax,%eax
或者 test %rdi, %rdi
,等等。我对这个做了什么感到非常困惑。 %eax,%eax
中的值不是相同的吗?它在测试什么?我在某个地方读到它正在执行AND
操作......但由于它们具有相同的值,它不会只返回%eax
吗?
以下是我发现此用法的一个示例:
400e6e: 85 c0 test %eax,%eax
400e70: 74 05 je 400e77 <phase_1+0x23>
我原本认为如果两个值相等,je
指令就会跳转......嗯,因为%eax
值本身就相等,那么在什么情况下我们才不会进行跳转呢?
作为一个编程新手,我非常希望有人能够解释一下。谢谢!
TEST
指令除了更新ZF
标志位外,还会更新其他标志位。请参考指令集手册。 - Jestertest
指令是做什么用的? - jww