2012-02-27 4 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, вероятно, будет изменен (вами), но вы вернете его предыдущее значение перед возвратом.

Смежные вопросы