【发布时间】: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)