我正在尝试编写一个代码来计算 arrayA 中三位数字的累积和,并将结果保存到 arrayB 中然后打印它们,只有累积部分发生错误。
在 0x00400160 发生运行时异常:地址超出范围 0x00000000 Invalid language element in line 'sll $t6, $t2, 2' in Next section
Next:
sll $t6, $t2, 2 # $t6 = t2(b_idx) \* 4
lw $t7, 0($t6) # $t7 = B\[b_idx\]
sw $t0, 0($t6) # B\[b_idx\] = tmp_sum
li $t0, 0 #tmp_sum = 0
addi $t2, $t2, 1 #b_idx++
blt $t1, $a0, Loop # Loop until i \< B_SIZE
jr $ra
当试图索引你的数组时,你似乎忘记了将偏移量添加到数组的基址。在你的例子中 $t2 是你的循环变量(我称之为“i”)。为了得到数组[i]的值,你不仅要得到i的偏移量,还要add那个数组基地址的偏移量。您正在尝试错误地取消引用某些内容,这就是您收到该错误的原因。
如果我们假设你的数组的基地址是 $a1,你必须在你的 sll 之后包含一个类似于
add $t6, $t6, $a1
的指令 2 来实际获得你想要取消引用的地址(即 array[i])。似乎有大量指令我看不到,但希望这有助于解决您当前遇到的错误。如果您需要任何进一步的帮助,请告诉我。