как использовать временные регистры - сохраняются ли значения после возврата? - PullRequest
1 голос
/ 06 октября 2011

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

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

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

1 Ответ

3 голосов
/ 07 октября 2011

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

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

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

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

...