mov ah, -128
mov bh, 80h
add ah,bh
考虑到计算不需要进位,为什么此代码设置CF?或更妙的是,CF在有符号算术中的行为和OF在无符号算术中的行为是什么?
答案 0 :(得分:5)
加法运算为Two's Complement,结果大于8位。 0x80 + 0x80 = 0x100
或二进制文件:
0b10000000
+ 0b10000000
-------------
= 0b100000000
因此结果为0并设置了进位标志。
不要将-128
视为负数,而应将其视为正数(128
),该位与两位对负数的补码具有相同的位模式,然后携带删除未签名的加法。 (因此,设置了进位标志。)
答案 1 :(得分: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