0

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

f = A[B[i]]

我被告知它可以在 6 行中完成,但不能完全弄清楚如何。 f$t0i$t3,在,A[]$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

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

谢谢。

4

1 回答 1

1

可能有更有效的方法,但这里有 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 指令集参考以获取有关各个指令功能的更多信息。

于 2013-09-20T18:01:01.440 回答