MIPS地址超出范围(MARS);初学者

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

我正在尝试理解一些代码。我仍处于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)

如果您能帮助我,我将不胜感激!

assembly mips runtimeexception mars-simulator outofrangeexception
1个回答
0
投票

此奇怪的代码将从0x3e8或0x3ec加载,具体取决于要启动的$t0中的内容。

这两个都是异常低的内存位置,它们不存储任何有用的东西,并且通常受到保护以检测程序错误。

通常来说,我们希望查看分配给各种内容的特定范围内的内存地址。尽管还不全面,但以下内容应给出对MARS中的简单程序的期望的一些想法:

  • 代码为0x00400000到0x004FFFFF,
  • 0x10010000到0x1003FFFF范围内的全局数据,
  • 堆数据在0x10040000到0x1FFFFFFF范围内,
  • 堆栈数据范围为0x70000000到0x7FFFFFFF

地址超出有效内容范围通常会(但并非总是)导致错误,因为这些地址无效,因此程序中出现了问题–程序正在尝试访问不属于该地址的内存有效的数据或指令(例如,全局,堆,堆栈或代码)

您将不得不调试较大的代码,以了解其试图执行的操作,并查看错误的出处,以及为什么可能会发生此错误。

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