2012-02-27 98 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可能會被修改(由您),但您將在返回之前恢復其先前的值。