【问题标题】:x86 cmpl and jnex86 cmpl 和 jne
【发布时间】:2013-02-23 16:45:25
【问题描述】:

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

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

【问题讨论】:

  • 顺便说一句:这是 AT&T 语法。

标签: assembly x86 att


【解决方案1】:

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.

【讨论】:

  • 非常感谢。如果 -0x10(%ebp) 减去 $0x7 不等于 0,那么 ZF 设置为 0?还是反过来?
  • 不客气。是的,如果 -0x10(%ebp) 减去 $0x7 不等于,则 ZF 设置为 0
猜你喜欢
  • 2014-07-29
  • 2012-12-25
  • 2016-06-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2015-07-26
  • 1970-01-01
相关资源
最近更新 更多