我搜索了一下,没有找到任何可以正确解释这一点的东西。
在 MIPS 中,你有add
并且addu
可以做加法。主要区别在于addu
不会产生溢出异常。
假设我们有这个二进制文件(我使用了 4 位,尽管 MIPS 为 32 以进行简化):
0111
如果我们添加1
它变成1000
.
该add
指令存在溢出且没有进位,因为正 7 变为负 1(假设 MIPS 中的二进制补码)。这也会产生溢出异常。
addu
没有溢出也没有进位,因为一切都按预期进行。
现在假设你有这个二进制文件:
1111
如果我们添加1
它变成0000
.
使用该add
指令应该不会溢出,因为负 1 变为 0。进位标志呢,它会变为 1 吗?
addu
指令会发生什么?是否认为溢出,因为 15 变成了 0?我知道没有溢出异常,但是溢出标志会发生什么?它被设置为1吗?携带标志呢?