我正在尝试理解一些代码。我仍处于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)
如果您能帮助我,我将不胜感激!
答案 0 :(得分:0)
此奇怪的代码将从0x3e8或0x3ec加载,具体取决于$t0
中的内容。
这两个都是异常低的内存位置,它们不存储任何有意义的内容,并且通常受到保护以检测程序错误。
通常来说,我们希望看到分配给各种内容的特定范围内的内存地址。尽管一点也不全面,但以下内容应能使人们对MARS中的一个简单程序有一些期望:
在有效内容指定范围之外的地址通常会(但并非总是)导致错误,因为这些地址无效,因此程序中出现了问题–程序正在尝试访问不属于内存的内存有效的数据或指令(例如全局,堆,堆栈或代码)
您将不得不调试较大的代码,以了解其尝试执行的操作,并查看错误的出处,以及为什么可能发生此错误。