很好的尝试,但您的代码不正确,因为 $t0 已加载但从未使用过。我也不确定数字 64 是从哪里来的,但基本上应该是从B[4]、$t0 中提取的值。
您可能对嵌套数组访问A[B[4]] 感到困惑。从概念上讲,这是使用存储在B[4] 中的值作为A 的索引。最好将其扩展并从每行单个操作的 C 代码开始:
t0 = B[4];
t1 = A[t0];
f = g - t1;
现在更容易想出:
lw $t0, 16($s7) # B_val = B[4]
sll $t0, $t0, 2 # B_val *= 4
addu $t2, $t0, $s6 # A_offset = B_val + A_base
lw $t1, ($t2) # A_val = A[A_offset]
sub $s0, $s1, $t1 # f = g - A_val
在这里,我假设B 的值需要乘以 4。
您总是可以编写一个程序来验证您的工作(至少,在考试之后):
.data
A: .word 1, 1, 1, 1, 24
B: .word 1, 1, 1, 1, 4
.text
main:
la $s6 A # A_base
la $s7 B # B_base
li $s1, 42 # g = 42
lw $t0, 16($s7) # B_val = B[4]
sll $t0, $t0, 2 # B_val *= 4
addu $t2, $t0, $s6 # A_offset = B_val + A_base
lw $t1, ($t2) # A_val = A[A_offset]
sub $s0, $s1, $t1 # f = g - A_val
li $v0, 1
move $a0, $s0
syscall # => should be 42 - 24 = 18
li $v0, 10
syscall