无效的程序计数器值:0

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

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

Go:运行 try.s

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

Go:执行因错误而终止。

我收到此错误消息与我正在使用的代码无关,只是想知道这是否是一个错误 在火星模拟器中或者如果我缺少什么。

assembly mips mars-simulator
4个回答
10
投票

您可能会以

jr $ra
(返回呼叫者)结束程序。然而,MARS 执行的代码没有调用者 - 它在启动时执行,并且没有可返回的函数,因此
$ra
的内容为零。

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

    li $v0, 10
    syscall

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 移到了 swap 之前。 我错误地认为 main 是一个保留标签。 并且它会首先自动直接跳到主程序。 但显然情况并非如此,因为在我在 main 中调用 jal swap 之前它已经命中了我的 jr $ra 指令。

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


4
投票

我知道这个问题很老了,但对于像我一样拼命谷歌搜索答案的人来说:尝试执行上述系统调用而不是返回,并尝试将主函数放在所有其他标签之前。此外,“设置”菜单下还有一个“将程序计数器初始化为全局“主”(如果已定义)”;确保已选中。我不知道启用该功能是否允许您将主标签放在其他标签之后,因为我还没有尝试过。我所描述的是我为使其发挥作用所做的事情,没有其他任何内容。祝你好运!


0
投票

我在做大学作业时也犯了同样的错误。 在我的文件被教授提供的其他测试文件导入并且没有任何效果后,发生了错误。在检查设置菜单中的“将程序计数器初始化为全局主”选项后,我得到了修复。感谢杰西·维克多的回答。

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