3

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

去:运行 try.s

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

Go:执行因错误而终止。

我收到此错误消息,与我正在使用的代码无关,只是想知道这是否是 MARS 模拟器中的错误,或者是我缺少的东西。

4

3 回答 3

9

你可能会用一个jr $ra(返回给调用者)来完成你的程序。然而,由 MARS 执行的代码没有调用者——它在启动时执行并且没有函数可以返回,所以内容$ra为零。

在 MARS 上结束程序的正确方法是使用“exit”系统调用:

    li $v0, 10
    syscall
于 2010-11-14T01:32:20.830 回答
6

我是 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 指令。

无论如何,我希望这会有所帮助。

于 2011-02-03T00:43:30.797 回答
3

我知道这个问题很老,但是对于像我一样并且拼命寻找答案的人来说:尝试执行上述系统调用而不是返回,并尝试将您的 main 函数放在所有其他标签之前。此外,“设置”菜单下还有一个“将程序计数器初始化为全局“主”(如果已定义)”;确保已检查。我不知道启用它是否允许您将主标签放在其他标签之后,因为我还没有尝试过。我所描述的是我为使其工作所做的工作,仅此而已。祝你好运!

于 2011-10-01T21:38:12.733 回答