我正在尝试理解一些代码。我仍处于MIPS的起步阶段。我试图让它在火星上运行,以逐步了解发生了什么。但是,它在第6行停止:运行时异常在0x0040000c(请参阅第6行):地址超出范围0x000003ec。
[我试图通过在这里的其他帖子中查找解决方案,但是无法确定问题所在。
add $t6, $t0, $t0
addi $t4, $t0, 0x7
andi $t3, $t4, 0x4
loop:
lw $t2, 0x3e8($t3)
add $t6, $t3, $t6
addi $t5, $t4, 1
sub $t1, $t2, $t6
bne $t5, $t6, loop
sw $t6, 0x400($t1)
如果您能帮助我,我将不胜感激!
此奇怪的代码将从0x3e8或0x3ec加载,具体取决于要启动的$t0
中的内容。
这两个都是异常低的内存位置,它们不存储任何有用的东西,并且通常受到保护以检测程序错误。
通常来说,我们希望查看分配给各种内容的特定范围内的内存地址。尽管还不全面,但以下内容应给出对MARS中的简单程序的期望的一些想法:
地址超出有效内容范围通常会(但并非总是)导致错误,因为这些地址无效,因此程序中出现了问题–程序正在尝试访问不属于该地址的内存有效的数据或指令(例如,全局,堆,堆栈或代码)
您将不得不调试较大的代码,以了解其试图执行的操作,并查看错误的出处,以及为什么可能会发生此错误。