我有下面的代码:
mov al, -5
add al, 132
add al, 1
根据我的检查,溢出标志和进位标志将在第一次操作中设置,在第二次操作中仅会设置溢出标志。
但我不明白为什么:
- 在无符号数中,结果为143(8FH),适合8位无符号数(小于255)=> 进位标志不应该被设置。在有符号数中,结果为127,适合8位有符号数,溢出不应该被设置。
这是怎么回事?谢谢。
我有下面的代码:
mov al, -5
add al, 132
add al, 1
根据我的检查,溢出标志和进位标志将在第一次操作中设置,在第二次操作中仅会设置溢出标志。
但我不明白为什么:
这是怎么回事?谢谢。
当两个正数相加的结果为负数,或者两个负数相加的结果为正数时,就会发生溢出(Overflow)。
例如:+127+1=
+127=0111 1111
+1=0000 0001
---------
1000 0000
当我们查看两个操作数的符号位以及结果的符号位时,发现溢出已经发生,因此答案是不正确的。
adds r0, r1, r0
,其中r0 = 0x80000000
,r1 = 0x80000000
,执行后,Z = 1
,C = 1
,V = 1
。 - Simon Z.