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