MIPS - 数组索引中的数组

时间:2013-09-20 15:58:56

标签: arrays assembly mips mips32

MIPS中的以下C代码是什么?

f = A[B[i]]

我被告知它可以在6行中完成,但无法弄清楚如何。 f位于$t0i位于$t3A[]位于$s0B[]位于$s1 }}。所有类型都是整数。

我能想到的最好的是

lw $t5, $t3($s0);  # Doesn't work because lw syntax doesn't accept a register as an offset
lw $t6, $t5($s1);
sadd $t0, $t6, $zero

显然这是错误的。我如何获得每条线的正确偏移?

感谢。

1 个答案:

答案 0 :(得分:0)

可能有更有效的方法,但这是6行中的一种方式:

sll $t2,$t3,2    # t2 = i * sizeof(int)
addu $t2,$t2,$s1 # t2 = &B[i]
lw $t0,0($t2)    # t0 = B[i]
sll $t0,$t0,2    # t0 *= sizeof(int)
addu $s0,$s0,$t0 # s0 = &A[B[i]]
lw $t0,0($s0)    # t0 = A[B[i]]

阅读MIPS instruction set reference以获取有关各个指令的详细信息。