Как использовать временные регистры - сохраняются ли значения после возврата?
Я пишу программу в сборке MIPS с использованием симулятора MARS. я использую jal
сделать вызов функции, затем с помощью jr $ra
в конце этого, чтобы вернуться к исходной точке в программе.
Что меня смущает, так это то, что $t
регистры, которые я использовал в своей функции, все еще содержат значения после возврата в основную программу.
Должен ли я обнулять эти регистры перед возвратом, чтобы будущие функции, использующие временные регистры, могли начинаться с чистого листа? Я что-то здесь упускаю?
1 ответ
Что меня смущает, так это то, что регистры $ t, которые я использовал в своей функции, все еще содержат значения после возвращения в основную программу.
Да, точно так же, как все остальные регистры имеют одинаковые значения (ничего особенного не происходит только потому, что вы возвращаетесь из своей функции).
Должен ли я обнулять эти регистры перед возвратом, чтобы будущие функции, использующие временные регистры, могли начинаться с чистого листа? Я что-то здесь упускаю?
Не нужно обнулять их, они были там для вас, чтобы использовать! Вы можете делать все что угодно с временными регистрами, просто имейте в виду, что если вы вызываете другую функцию (или свою собственную!), Они будут делать то же самое, поэтому вы не можете зависеть от значений в функции звонки. Сравните это с $s
регистры, которые вам нужно сохранить и восстановить, если вы измените, но вы можете (обычно) зависеть от других функций, которые делают то же самое для вас. Это часть соглашения о вызовах.