我目前正在使用MIPS处理器下的汇编语言。我现在在 使用MARS模拟器,由于原因不明,我每次运行后都会收到以下错误信息:
Go:运行try.s
错误:程序计数器值无效:0
Go:执行因错误而终止。
我收到此错误消息独立于我正在使用的代码,只是想知道这是否是一个错误 在MARS模拟器中或者如果它是我缺少的东西。
答案 0 :(得分:7)
您可能使用jr $ra
(返回来电者)完成您的程序。但是,MARS执行的代码没有调用者 - 它在启动时执行,没有返回的函数,因此$ra
的内容为零。
在MARS上结束程序的正确方法是使用“exit”系统调用:
li $v0, 10
syscall
答案 1 :(得分:5)
我是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移到了swap之前。我错误地认为main是一个保留标签。而且它会自动直接跳到主要的第一位。但显然事实并非如此,因为在我打电话给jal swap之前,它正在点击我的jr $ ra指令。
无论如何,我希望这有帮助。
答案 2 :(得分:3)
我知道这个问题已经过时了,但是对于那些像我一样并且拼命搜索答案的人:尝试上面的系统调用而不是返回,并尝试将主函数放在所有其他标签之前。此外,在“设置”菜单下还有一个“全局初始化程序计数器”主“如果已定义”;确保选中。我不知道启用是否允许您将主标签放在其他标签之后,因为我还没有尝试过。我所描述的就是我所做的工作,而不是别的。祝你好运!