【发布时间】:2012-10-15 09:55:34
【问题描述】:
我对汇编语言编程非常陌生,我目前正在尝试读取从二进制文件生成的汇编语言。我遇到过
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 已修复(在我的回答中),抱歉。
-
另一个可能的重复:What does the
testinstruction do?