将以下C代码转换为MIPS汇编的最佳解决方案是什么?
x = A[i];
请注意x ⇨ $t0
,A[] ⇨ $s0
,i ⇨ $s1
。
使用add
:
sll $t0, $s1, 2
add $t0, $t0, $s0
或addu
:
sll $t0, $s1, 2
addu $t0, $t0, $s0
我知道add
和addu
之间的difference,但我不明白何时使用其中一个。
答案 0 :(得分:2)
C代码不会在整数溢出时抛出异常。所以组装也不应该。使用addu
。
答案 1 :(得分:0)
add
会在签名溢出时抛出异常。
假设你想要索引一个大数组,数组在(signed)INTPTR_MAX
和(signed)INTPTR_MIN
之间交叉。如果使用add
,这将抛出异常,尽管您可能已经在数组范围内
在数组索引中你更可能需要关注的是无符号溢出,从(unsigned)UINTPTR_MAX
到zero
,但MIPS对你没有帮助,AFAIK。< / p>