Восстановление регистров в MIPS - PullRequest
0 голосов
/ 28 февраля 2012

В следующем разделе кода 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

1 Ответ

1 голос
/ 28 февраля 2012

Я предполагаю, что $ a0 является входным аргументом функции и что $ v0 является возвращаемым значением функции.

Эти регистры не нужно сохранять и восстанавливать, потому что они будут использоваться/modified.

Ваша функция рекурсивная, поэтому вы захотите сохранить и восстановить обратный адрес $ ra.Вам не нужно сохранять и восстанавливать какие-либо регистры, которые вы либо не изменяете, либо оставляете функцию с ними в том же состоянии, в котором она была введена.В этом случае $ sp, вероятно, будет изменен (вами), но вы вернете его предыдущее значение перед возвратом.

...