subq和cf如何协同工作?

时间:2016-11-12 19:46:05

标签: assembly x86

我已经为如何设置进位标志提供了两种可能性:

0x00_00_00_00_00_00_00_00 - 0x80_00_00_00_00_00_00_00

(下划线显示字节)

如果通过减法做到这一点,我们将不得不借用我们没有的东西,这应该将CF设置为1.

但是,我认为ALU不会减去,而只是添加两个补码。 0x80_00_00_00_00_00_00_00的二进制补码是0x80_00_00_00_00_00_00_00。所以, 0x00_00_00_00_00_00_00_00 - 0x80_00_00_00_00_00_00_00不会携带63位中的任何位,这会将CF设置为0.

对于x86中的64位值,以下哪种情况有效?

ALU实际上是执行减法还是转换为2的补码,转换后的值是否进行减法?

由于

1 个答案:

答案 0 :(得分:1)

请参阅Understanding Carry vs. Overflow conditions/flags了解有关携带的更多信息。

是的,当然,SUB的任何实现仍然必须保持相同的体系结构可见行为,包括标志结果。

ALU如何在内部工作并不重要,只有结果是什么,零减去非零产生进位,所以任何x86 CPU都会在这种情况下设置CF.任何没有的CPU都不是x86。

有关英特尔x86手册(以及许多其他优秀链接)的链接,请参阅标记维基;我确信在官方手册的某处有一个关于标志设置行为的部分。