说我想在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,以便将其正确地返回给此应用程序的调用者?
答案 0 :(得分:3)
使用syscall 17:
exit2 (terminate with value)
----------------------------
$v0 = 17
$a0 = termination result
请注意"如果MIPS程序在MARS图形界面(GUI)的控制下运行,则忽略$ a0中的退出代码。"