在MIPS代码的以下部分中,我必须说明在序言期间必须保存哪些寄存器,然后再恢复。我找到了一些包括: $ ra,$ a0和$ v0
但是,有什么不明显的东西也必须保存/恢复,比如$ sp或$ fp?感谢。
func: #insert function prologue here
bne $a0, $0, else
addi $v0, $0, 1
j ret
else:
srl $a0, $a0, 1
jal func
addi $v0, $v0, 1
ret: #insert function epilogue here
jr $ra
答案 0 :(得分:1)
我假设$ a0是函数的输入参数,$ v0是函数的返回值。
这些寄存器不需要保存和恢复,因为它们将被使用/修改。
您的函数是递归的,因此您需要保存并恢复返回地址$ ra。您不必保存和恢复任何您未修改的寄存器,也不必将其保留在与输入功能时相同的状态。在这种情况下,$ sp可能会被修改(由你),但你会在返回之前恢复它以前的值。