最佳解决方案:添加或addu

时间:2014-07-07 18:22:58

标签: assembly add mips memory-address

将以下C代码转换为MIPS汇编的最佳解决方案是什么?

x = A[i];

请注意x ⇨ $t0A[] ⇨ $s0i ⇨ $s1

使用add

sll $t0, $s1, 2
add $t0, $t0, $s0

addu

sll $t0, $s1, 2
addu $t0, $t0, $s0

我知道addaddu之间的difference,但我不明白何时使用其中一个。

2 个答案:

答案 0 :(得分:2)

C代码不会在整数溢出时抛出异常。所以组装也不应该。使用addu

答案 1 :(得分:0)

MIPS中的

add会在签名溢出时抛出异常。
假设你想要索引一个大数组,数组在(signed)INTPTR_MAX(signed)INTPTR_MIN之间交叉。如果使用add,这将抛出异常,尽管您可能已经在数组范围内 在数组索引中你更可能需要关注的是无符号溢出,从(unsigned)UINTPTR_MAXzero,但MIPS对你没有帮助,AFAIK。< / p>