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
显然这是错误的。我如何获得每条线的正确偏移?
感谢。
答案 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以获取有关各个指令的详细信息。