12

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

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

1 回答 1

15

cmpl 从 $0x7 中减去 -0x10(%ebp) 并修改标志: AF CF OF PF SF ZF

  1. 如果 -0x10(%ebp) 处的内存等于立即数 0x7,则设置标志ZF。这低于 EBP,因此它可能是一个局部变量,如果这是使用 EBP 作为帧指针的未优化构建。
  2. jne 80484db表示如果两个比较的数不同(ZF=0),跳转到 80484db

总而言之,您的代码相当于:

compare A to 7
jump to 0x80484db if they are different.
于 2013-03-08T08:04:34.367 回答