mov ah, -128
mov bh, 80h
add ah,bh
考虑到计算不需要进位这一事实,为什么这段代码设置了 CF?或者更好的是,CF 在有符号算术中的行为和 OF 在无符号中的行为是什么?
加法是作为二进制补码完成的,结果大于 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