2012-02-27 9 views
0

MIPSコードの次のセクションでは、プロローグ中に保存する必要のあるレジスタを指定してから、後で復元する必要があります。 $ ra、$ a0、$ v0MIPSでレジスタを復元する

$ 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はおそらく(あなたによって)変更されますが、戻る前に前の値を復元します。

関連する問題