程序计数器值无效:0

时间:2010-05-13 13:02:36

标签: assembly mips mars-simulator

我目前正在使用MIPS处理器下的汇编语言。我现在在 使用MARS模拟器,由于原因不明,我每次运行后都会收到以下错误信息:

  

Go:运行try.s

     

错误:程序计数器值无效:0

     

Go:执行因错误而终止。

我收到此错误消息独立于我正在使用的代码,只是想知道这是否是一个错误 在MARS模拟器中或者如果它是我缺少的东西。

3 个答案:

答案 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)

我知道这个问题已经过时了,但是对于那些像我一样并且拼命搜索答案的人:尝试上面的系统调用而不是返回,并尝试将主函数放在所有其他标签之前。此外,在“设置”菜单下还有一个“全局初始化程序计数器”主“如果已定义”;确保选中。我不知道启用是否允许您将主标签放在其他标签之后,因为我还没有尝试过。我所描述的就是我所做的工作,而不是别的。祝你好运!