组装 - 进位标志VS溢出标志

时间:2011-12-13 21:08:32

标签: assembly

我有下一个代码:

mov al, -5
add al, 132
add al, 1

当我检查时,溢出标志和进位标志将在第一个操作中设置,在第二个操作中,仅设置溢出。

但我不明白为什么:

  1. 在无符号数字中,结果为143(8FH),为此适合8位无符号数(小于255)=>不应设置进位标志。在带符号的数字中,结果为127,它适合8位有符号,并且不应设置溢出。
  2. 什么错了?感谢。

2 个答案:

答案 0 :(得分:22)

添加两个正数的结果为负数或溢出时发生溢出                      添加两个负数的结果是正数。 例如: +127+1=?

+127=0111 1111
  +1=0000 0001
     ---------
     1000 0000 

当我们看两个操作数的符号位和符号位时                  结果,我们发现溢出发生且答案不正确。

答案 1 :(得分:16)

在无符号算术中,您已将0xFB添加到0x84,即251 + 132,实际上大于8位,因此进位标志已设置。

在第二种情况下,您将+127添加到1,这确实超过了有符号的8位范围,因此设置了溢出标志。