1

我想知道 NEG 指令是否也会影响溢出标志。我知道它否定了变量的值,但无法确定它是否会影响溢出标志。

4

2 回答 2

5

如果您想了解说明的作用,请参阅参考手册。

基本参考资料,即英特尔指令集手册对 NEG 指令进行了说明:

Flags Affected
The CF flag set to 0 if the source operand is 0; otherwise it is set to 1.
The OF, SF, ZF, AF, and PF flags are set according to the result. 

所以很明显NEG指令设置了O标志;因此它会影响O 标志,这是 OP 的原始问题。每次执行时都会这样做。(人们不应将“未更改”与“未设置”混淆)。

该特定参考手册未提供特定算法来指示 O 何时设置为零或一。但是,英特尔 CPU 是 2 的补码机器。减法指令具有完全相同的措辞。NEG X 等价于 (0 SUBTRACT X)。所以NEG应该根据“溢出”为(0 SUBTRACT X)设置O位;当 X 为 0x8000000 时,这将设置为 O。

查看Intel 基本架构手册,我们发现 OF 位的描述如下:

OF (bit 11) Overflow flag
— Set if the integer result is too large a positive number or too small a
  negative number (excluding the sign-bit) to fit in the destination operand;
  cleared otherwise. This flag indicates an overflow condition for signed-integer
 (two’s complement) arithmetic

证实了我们的理解。

于 2014-10-18T14:35:52.307 回答
0

如果你neg的 value 80h,操作数不会改变,但溢出标志确实设置为1

于 2021-02-03T07:09:26.407 回答