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

时间:2018-12-05 09:07:20

标签: assembly x86 nasm

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

考虑到计算不需要进位,为什么此代码设置CF?或更妙的是,CF在有符号算术中的行为和OF在无符号算术中的行为是什么?

2 个答案:

答案 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