0

次の MIPS の C コードは何ですか?

f = A[B[i]]

6行で実行できると言われていますが、方法がわかりません。 fあり、$t0ありi$t3ありA[]$s0およびB[]あり$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 行で 1 つの方法を示します。

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 に答える