2012-02-27 100 views
0

在下面的MIPS代码部分中,我必须说明在序言中必须保存哪些寄存器,然后再恢复。我发现一些包括: $ ra,$ a0和$ v0在MIPS中恢复寄存器

但是,是否有任何非明显的也必须保存/恢复,如$ 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 

回答

1

我假设$ a0是函数的输入参数,$ v0是函数的返回值。

这些寄存器不需要保存和恢复,因为它们将被使用/修改。

你的函数是递归的,所以你需要保存和恢复返回地址$ ra。您不必保存和恢复任何您未修改的寄存器,也不必保存与输入函数时相同的状态。在这种情况下,$ sp可能会被修改(由您),但您将在返回之前恢复其先前的值。