【发布时间】:2013-05-14 02:26:09
【问题描述】:
我对 add 和 addu 之间的区别感到困惑。
MIPS 指令参考说:
- 添加(有溢出)
- 添加无符号(无溢出)
我的理解是 add 与带符号的操作数一起使用,而 addu 与无符号的操作数一起使用。
但是让我们考虑这个例子(只有 6 位):
溢出 | 五 1 | 1 1 1这是我的推理:
- 如果我考虑第一个和第二个操作数有符号 数字(二进制补码),那么结果是正确的(-3 + -2 = -5)并且我不想要溢出异常。所以我会使用 addu 来避免这个异常,但是,虽然结果是一样的,但顾名思义,使用 addu 是为了无符号数!
- 如果我考虑第一个和第二个操作数 unsigned 数字,那么我希望引发异常(因为 61 + 62 不等于 59)。所以我会使用 add 来引发异常,而不是 addu,正如其名称所暗示的那样。
现在我的问题是:
- 假设操作数是有符号的(在上面的示例中为负数)数字,我应该使用 addu(正如我的推理所示)还是应该使用 add(顾名思义)?
- 假设操作数是无符号(正)数,我应该使用 add(正如我的推理所示)还是 addu(顾名思义)?
【问题讨论】:
-
非常糟糕的指令。不存在未签名添加或签名添加之类的东西。它与陷阱有关,是否应该是 addut 或类似的东西......(仍然可以,因为汇编程序不像机器代码那样刻在石头上)
标签: add mips instruction-set