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