我非常非常新的汇编语言程序设计,目前我正在阅读组装从二进制生成的语言。我碰到过
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'外还更新了其他标志。请参阅指令集参考。 – Jester
@Jester修复了(在我的回答中),对不起。 –
另一个可能的重复:?什么是'test'指令做(http://stackoverflow.com/q/6002079) – jww