如何从MIPS中的main函数返回值?

时间:2013-09-10 20:15:12

标签: mips mars-simulator

说我想在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.这是可以理解的,因为我必须覆盖$ v0寄存器才能使syscall工作。那么,我的问题是,我将保存值5,以便将其正确地返回给此应用程序的调用者?

1 个答案:

答案 0 :(得分:3)

使用syscall 17

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

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