Восстановление значения в другом регистре

Когда мы в разделе 5.1.4 определяли save и restore , мы не указали, что произойдет, если попытаться восстановить значение не в том регистре, который был сохранен последним, как в последовательности команд

(save y)
(save x)
(restore y)

Есть несколько разумных вариантов значения restore :

а. (restore y) переносит в y последнее значение, сохраненное на стеке, независимо от того, откуда это значение взялось. Так работает наш имитатор. Покажите, как с помощью такого поведения убрать одну команду из машины Фибоначчи (раздел 5.1.4, рисунок 5.12).

б. (restore y) переносит в y последнее значение, сохраненное на стеке, но только в том случае, когда это значение происходит из регистра y ; иначе возникает сообщение об ошибке. Модифицируйте имитатор и заставьте его вести себя таким образом. Придется изменить save так, чтобы он сохранял имя регистра вместе со значением.

в. (restore y) переносит в y последнее значение, сохраненное из y , независимо от того, какие другие регистры были сохранены и не восстановлены после y . Модифицируйте имитатор так, чтобы он вел себя таким образом. С каждым регистром придется связать свой собственный стек. Операция initialize-stack должна инициализировать стеки всех регистров.


(controller
   (assign continue (label fib-done))
 fib-loop
   (test (op

Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход