我想知道 NEG 指令是否也会影响溢出标志。我知道它否定了变量的值,但无法确定它是否会影响溢出标志。
问问题
2455 次
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 回答