减去 0x1 - 0x80000000 如何导致溢出?
How does subtracting 0x1 - 0x80000000 cause an overflow?
MOV R0, #0x80000000
MOV R1, #0x1
SUBS R2, R1, R0
根据 运行 此代码,设置标志 N 和 Z。现在,我知道如果运算结果为负,则设置 N 标志,当出现溢出时设置 Z 标志。
我不明白的是 0x1 - 0x80000000
是如何导致溢出的。感谢您的帮助!
考虑将这两个数字扩展到 36 位。当然,1 仍然是 1。 80000000 变成 f80000000。 1 - f80000000 = 080000001,正数。由于 080000001 作为正数不适合 32 位,因此存在溢出。
1
1000
+1110
======
10001
1000
+1110
======
0111
msbit 的进位和出位不一样...有符号溢出。
MOV R0, #0x80000000
MOV R1, #0x1
SUBS R2, R1, R0
根据 运行 此代码,设置标志 N 和 Z。现在,我知道如果运算结果为负,则设置 N 标志,当出现溢出时设置 Z 标志。
我不明白的是 0x1 - 0x80000000
是如何导致溢出的。感谢您的帮助!
考虑将这两个数字扩展到 36 位。当然,1 仍然是 1。 80000000 变成 f80000000。 1 - f80000000 = 080000001,正数。由于 080000001 作为正数不适合 32 位,因此存在溢出。
1
1000
+1110
======
10001
1000
+1110
======
0111
msbit 的进位和出位不一样...有符号溢出。