我有下一个代码:
mov al, -5
add al, 132
add al, 1
当我检查时,溢出标志和进位标志将在第一个操作中设置,在第二个操作中,仅设置溢出。
但我不明白为什么:
什么错了?感谢。
答案 0 :(得分:22)
添加两个正数的结果为负数或溢出时发生溢出
添加两个负数的结果是正数。
例如:
+127+1=?
+127=0111 1111
+1=0000 0001
---------
1000 0000
当我们看两个操作数的符号位和符号位时 结果,我们发现溢出发生且答案不正确。
答案 1 :(得分:16)
在无符号算术中,您已将0xFB
添加到0x84
,即251 + 132,实际上大于8位,因此进位标志已设置。
在第二种情况下,您将+127添加到1,这确实超过了有符号的8位范围,因此设置了溢出标志。