作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Possible Duplicate:
x86 Assembly - ‘testl’ eax against 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
本身很好,在什么情况下我们不会跳?
总的来说,我是编程的初学者,所以如果有人能向我解释这一点,我将非常感激。谢谢!
最佳答案
CMP
减去操作数并设置标志。也就是说,如果差值为零(操作数相等),它将设置零标志。
TEST
设置零标志 ZF
。如果两个操作数相等,则当两者都为零时,它们的按位与为零。当在结果中设置最高有效位时,TEST
还会设置符号标志 SF
,当在结果中设置最高有效位时,还会设置奇偶校验标志 PF
。设置位数为偶数。
JE
[Jump if Equals] 测试零标志并在设置该标志时跳转。 JE
是 JZ
[Jump if Zero] 的别名,因此反汇编器无法根据操作码选择一个。 JE
之所以如此命名,是因为如果 CMP
的参数相等,则设置零标志。
所以,
TEST %eax, %eax
JE 400e77 <phase_1+0x23>
如果 %eax
为零则跳转。
关于assembly - 测试点 %eax %eax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13064809/
我是一名优秀的程序员,十分优秀!