我有下一个代码:
mov al, -5
add al, 132
add al, 1
当我检查它时,溢出标志和进位标志将在第一次操作中设置,而在第二次操作中,只会设置溢出。
但我不明白为什么:
- 在无符号数中,结果为 143 (8FH),因此适合 8 位无符号数(小于 255)=> 不应设置进位标志。在有符号数中,结果为 127,适合 8 位有符号数,不应设置溢出。
怎么了?谢谢。
我有下一个代码:
mov al, -5
add al, 132
add al, 1
当我检查它时,溢出标志和进位标志将在第一次操作中设置,而在第二次操作中,只会设置溢出。
但我不明白为什么:
怎么了?谢谢。
当两个正数相加的结果为负数或两个负数相加的结果为正数时,就会发生溢出。例如:
+127+1=?
+127=0111 1111
+1=0000 0001
---------
1000 0000
当我们查看两个操作数的符号位和结果的符号位时,我们发现发生了溢出并且答案不正确。
在无符号算术中,您添加0xFB
了0x84
,即 251 + 132,它确实大于 8 位,因此设置了进位标志。
在第二种情况下,您将 +127 添加到 1,这确实超出了有符号的 8 位范围,因此设置了溢出标志。