MIPS - 0x00400160 处的运行时异常:地址超出范围 0x00000000 无效的语言元素

问题描述 投票:0回答:1

我正在尝试编写一个代码来计算 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
mips
1个回答
0
投票

当试图索引你的数组时,你似乎忘记了将偏移量添加到数组的基址。在你的例子中 $t2 是你的循环变量(我称之为“i”)。为了得到数组[i]的值,你不仅要得到i的偏移量,还要add那个数组基地址的偏移量。您正在尝试错误地取消引用某些内容,这就是您收到该错误的原因。

如果我们假设你的数组的基地址是 $a1,你必须在你的 sll 之后包含一个类似于

add $t6, $t6, $a1
的指令 2 来实际获得你想要取消引用的地址(即 array[i])。似乎有大量指令我看不到,但希望这有助于解决您当前遇到的错误。如果您需要任何进一步的帮助,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.