0

我正在尝试了解$ra,所以我想要的输出是“mainfunction1main”,通过main调用function1,function1返回main,main完成。但由于某种原因,我得到了一个打印“mainfunction1mainfunction1......”的无限循环我做错了什么?

    .data
mainstring: .asciiz "main"  
string1: .asciiz "function1"
string2: .asciiz "function2"
string3: .asciiz "function3"

.text

main:   la $a0,mainstring
        li $v0, 4
        syscall

        jal function1

        la $a0, mainstring
        syscall

function1: la $a0, string1
            syscall
            jr $ra
4

2 回答 2

2

您需要在 main 结束时返回。目前,您将再次掉入function1,它将跳回main,然后再次掉入,依此类推...

于 2012-12-08T22:02:41.550 回答
2

就像 JasonD 说的,你需要在 main 结束时退出你的程序。您需要做的就是在 main 末尾添加两行,如下所示:

main:
    # ... previous stuff

    li $v0, 10                                                                                                                                                               
    syscall

这将加载并运行exit系统调用(代码为 10。)

于 2012-12-08T22:10:27.850 回答