假设我想用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/