在有符号算术上设置的进位标志


mov ah, -128 
mov bh, 80h 
add ah,bh 

考虑到计算不需要进位这一事实,为什么这个代码设置CF?或者更好的是,CF在有符号算术中的行为和of在无符号运算中的行为是什么?

加法作为Two的补码完成,结果大于8位。0x80 + 0x80 = 0x100或二进制:

0b10000000
+  0b10000000
-------------
= 0b100000000

因此结果为0并且设置进位标志。

不要把-128看作一个负数,而是把它看作一个正数(128(,它与负数的两个互补具有相同的比特模式,然后进行无符号加法。(因此设置了进位标志。(

您不能用带符号的8位值表示128:

-128 = 0x80

所以你在计算:

(-128)
+ (-128)
-------
-256   (not a 8 Bit value and overflow to the next Byte -> C is set)

并且进位已设置。

8位有符号值适用于以下范围:-128。。。127

最新更新