21

我有下一个代码:

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

当我检查它时,溢出标志和进位标志将在第一次操作中设置,而在第二次操作中,只会设置溢出。

但我不明白为什么:

  1. 在无符号数中,结果为 143 (8FH),因此适合 8 位无符号数(小于 255)=> 不应设置进位标志。在有符号数中,结果为 127,适合 8 位有符号数,不应设置溢出。

怎么了?谢谢。

4

2 回答 2

31

当两个正数相加的结果为负数或两个负数相加的结果为正数时,就会发生溢出。例如: +127+1=?

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

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

于 2012-11-16T21:31:56.657 回答
19

在无符号算术中,您添加0xFB0x84,即 251 + 132,它确实大于 8 位,因此设置了进位标志。

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

于 2011-12-13T21:16:23.097 回答