假设我想用MIPS编写以下C程序:

int main () {
  return 5;
}

当我在MARS中尝试以下MIPS代码时:
main:   ADDI $v0, $zero, 5     # $v0 = 5
        JR $ra                 # return from main()

我收到一个“无效程序计数器”错误这显然是因为你cannot jump out of the main function in MARS所以我试着这样重写:
main:   ADDI $v0, $zero, 5     # $v0 = 5
        li $v0, 10             # load 10(exit) for syscall
        syscall                # exit

执行此操作后,$v0寄存器包含值10,而不是5这是可以理解的,因为为了让syscall工作,我必须覆盖$v0寄存器那么,我的问题是,为了将值5正确地返回给这个应用程序的调用者,我应该在哪里保存它?

最佳答案

使用syscall 17

exit2 (terminate with value)
----------------------------
$v0 = 17
$a0 = termination result

请注意,如果MIPS程序在MARS图形界面(GUI)的控制下运行,则忽略A0中的退出代码。

关于mips - 如何从MIPS中的主函数返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41068427/

10-11 15:29