Сохранение содержимого регистров - Область сохранения

 

Для сохранения содержимого регистров при переходе к подпрограмме используется команда STM. Она дает возможность записывать информацию указываемых регистров в последовательные ячейки некоторой области памяти, называемой областью сохранения. Общепринятые соглашения относительно работы с этой областью таковы: сама область содержит 18 полных слов, и при переходе к подпрограмме в регистре 13 должен находиться адрес первого из них.

Согласно принятому соглашению, сохранение содержимого регистров производится, начиная с четвертого слов области сохранения. Содержимое регистров записывается в память в следующем порядке: 14, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12. Регистр 13 играет особую роль в процессе сохранения содержимого регистров, как мы увидим в дальнейшем, и поэтому требует особого обращения.

 

Рис. 13.5. Запись содержимого регистров в область сохранения, адрес которой находится в регистре 13.

Итак, мы хотим произвести запись содержимого регистров с 14-го по 12-й, начиная с четвертого слова области, адрес начала которой хранится в регистре 13. Этого можно достичь выполнением команды

STM 14,12,12(13)

(см. рис. 13.5). Для восстановления регистров по окончании выполнения подпрограммы достаточно произвести их загрузку значениями из области сохранения:

LM 14,12,12(13)

Эта команда должна непосредственно предшествовать команде возврата к основной программе.

Подводя итог всему сказанному, приведем теперь общую структуру произвольной подпрограммы, удовлетворяющей перечисленным требованиям. Пусть подпрограмма имеет имя SUBR. Общая структура ее такова:

SUBR START 0

STM 14,12,12(13) СОХРАНЕНИЕ РЕГИСТРОВ

Вычисления

LM 14,12,12(13) ВОССТАНОВЛЕНИЕ РЕГИСТРОВ

BR 14 ВОЗВРАТ

Резервирование памяти и константы

END

Одной из услуг, предоставляемых операционной системой; пользователю, является обеспечение возможности работы с макробиблиотекой, содержащей набор очень удобных для использования макрокоманд. В этот набор входят такие макро, как SAVE и RETURN. Для того чтобы сохранить содержимое регистров, достаточно лишь написать

SAVE (14,12)

В программе макро будет заменено на команду

STM 14,12,12(13)

Для восстановления содержимого регистров и выполнения возврата к основной программе нужно воспользоваться другим макро:

RETURN (14,12)

Это эквивалентно заданию пары команд:

LM 14,12,12(13)

BR 14

Использовать стандартные макро или писать эквивалентные им команды, является делом вкуса.