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

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

4

2 回答 2

5

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

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

因此结果为 0,进位标志置位。

不要将其-128视为负数,而应将其视为与负数的二进制补码128具有相同位模式的正数( ),然后进行无符号加法。(因此设置了进位标志。)

于 2018-12-05T09:12:51.430 回答
0

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

-128 = 0x80

所以你计算:

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

进位已设置。

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

于 2018-12-05T09:37:03.770 回答