【问题标题】:Does NOP affect the status registers in Intel x86 architecture?NOP 会影响 Intel x86 架构中的状态寄存器吗?
【发布时间】:2014-02-21 08:31:52
【问题描述】:

我最近注意到 Intel x86 汇编中的 NOP 指令实际上与 XCHG EAX, EAX 相同

更改状态寄存器会不会带来意想不到的结果?
例如,如果EAX 最初为零,然后FLAG 寄存器的第六位(零位)将在NOP 之后设置。

那么在我的代码中使用NOP 是否安全?

【问题讨论】:

  • XCHG 不修改任何标志。
  • XCHG 的形式为xchg regA, regB,其中 regA == regB 是一个例外,而不是常态。从逻辑上讲,在这种情况下,目标寄存器是什么?应该从哪个寄存器相应地设置标志?因为无法给出答案,所以标志根本不会被修改。因此,xchg ax,ax 可用于编码单字节 NOP。 (例如 xchg bx,bx 可用于编码两个字节的 NOP)

标签: assembly x86


【解决方案1】:

A random x86 reference 很容易解释这一点,通过声明XCHG 指令:

受影响的标志

没有

【讨论】:

    【解决方案2】:

    NOP(或 XCHG 或 MOV)不会更改 x86 架构中的 FLAGS 寄存器。使用 NOP 总是安全的。 (怎么可能不同?)

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2014-02-04
      • 2020-03-26
      • 2012-10-25
      • 2018-04-10
      • 2013-04-15
      • 2020-05-11
      • 2019-08-18
      • 1970-01-01
      相关资源
      最近更新 更多