2013-03-08 41 views
5

我正在跟踪一些x86代码的任务,我想知道“cmpl”究竟做了什么以及如何预测“jne”是否会被满足。x86 cmpl和jne

80484bf: 83 7d f0 07    cmpl $0x7,-0x10(%ebp) 
80484c3: 75 16     jne 80484db 

此外,这使用英特尔语法。

谢谢。

+8

顺便说一句:这是AT&T语法。 – 2013-03-08 08:09:31

回答

7

CMPL从$ 0x7的减去-0x10(%EBP),并修改标志:AF CF PF SF ZF的。

  1. 如果-0x10(%EBP),这是你的函数参数之一,等于为0x7则标志ZF设置。
  2. JNE80484分贝意味着,如果两个被比较的数字是不同的(ZF = 0),则跳转到80484分贝

要summerize,代码等同于:

compare A to B 
jump into 80484db if they are different. 
+0

非常感谢。所以如果-0x10(%ebp)减去$ 0x7不等于零,那么ZF被设置为0?或者是周围的其他方式? – Richarizard 2013-03-08 08:42:36

+1

不客气。是的,如果-0x10(%ebp)减去$ 0x7不相等,则ZF被设置为0 – 2013-03-08 08:54:42