Как использовать временные регистры - сохраняются ли значения после возврата?

Я пишу программу в сборке MIPS с использованием симулятора MARS. я использую jal сделать вызов функции, затем с помощью jr $ra в конце этого, чтобы вернуться к исходной точке в программе.

Что меня смущает, так это то, что $t регистры, которые я использовал в своей функции, все еще содержат значения после возврата в основную программу.

Должен ли я обнулять эти регистры перед возвратом, чтобы будущие функции, использующие временные регистры, могли начинаться с чистого листа? Я что-то здесь упускаю?

1 ответ

Что меня смущает, так это то, что регистры $ t, которые я использовал в своей функции, все еще содержат значения после возвращения в основную программу.

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

Должен ли я обнулять эти регистры перед возвратом, чтобы будущие функции, использующие временные регистры, могли начинаться с чистого листа? Я что-то здесь упускаю?

Не нужно обнулять их, они были там для вас, чтобы использовать! Вы можете делать все что угодно с временными регистрами, просто имейте в виду, что если вы вызываете другую функцию (или свою собственную!), Они будут делать то же самое, поэтому вы не можете зависеть от значений в функции звонки. Сравните это с $s регистры, которые вам нужно сохранить и восстановить, если вы измените, но вы можете (обычно) зависеть от других функций, которые делают то же самое для вас. Это часть соглашения о вызовах.

Другие вопросы по тегам