我目前正在 MIPS 处理器下使用汇编语言。我目前正在使用 MARS 模拟器,由于未知原因,每次运行后我都会收到以下错误消息:
去:运行 try.s
错误:无效的程序计数器值:0
Go:执行因错误而终止。
我收到此错误消息,与我正在使用的代码无关,只是想知道这是否是 MARS 模拟器中的错误,或者是我缺少的东西。
我目前正在 MIPS 处理器下使用汇编语言。我目前正在使用 MARS 模拟器,由于未知原因,每次运行后我都会收到以下错误消息:
去:运行 try.s
错误:无效的程序计数器值:0
Go:执行因错误而终止。
我收到此错误消息,与我正在使用的代码无关,只是想知道这是否是 MARS 模拟器中的错误,或者是我缺少的东西。
你可能会用一个jr $ra
(返回给调用者)来完成你的程序。然而,由 MARS 执行的代码没有调用者——它在启动时执行并且没有函数可以返回,所以内容$ra
为零。
在 MARS 上结束程序的正确方法是使用“exit”系统调用:
li $v0, 10
syscall
我是 MIPS 的新手,我刚刚遇到了这个问题。这就是我所拥有的:
.data
.text
swap:
# do stuff
jr $ra
main:
# do stuff
jal swap
li $v0,10
syscall
我通过将其更改为以下内容来修复它:
.data
.text
main:
# do stuff
jal swap
li $v0,10
syscall
swap:
# do stuff
jr $ra
请注意,我将 main 移动到交换之前。我错误地认为 main 是保留标签。并且它会首先自动跳转到 main 。但显然情况并非如此,因为它在我调用 main 中的 jal swap 之前已经达到了我的 jr $ra 指令。
无论如何,我希望这会有所帮助。
我知道这个问题很老,但是对于像我一样并且拼命寻找答案的人来说:尝试执行上述系统调用而不是返回,并尝试将您的 main 函数放在所有其他标签之前。此外,“设置”菜单下还有一个“将程序计数器初始化为全局“主”(如果已定义)”;确保已检查。我不知道启用它是否允许您将主标签放在其他标签之后,因为我还没有尝试过。我所描述的是我为使其工作所做的工作,仅此而已。祝你好运!