Читайте также:
|
|
Подпрограммы как средство модульного программирования
В большинстве прикладных программ некоторые последовательности ко-манд встречаются не один раз,но оперируют разными данными.Такие после-довательности можно оформить в макрокоманды.Однако расширения мак-рокоманд целиком включаются в объектную программу и значительно уве-личивают ее длину.Гораздо удобнее включить повторяющуюся последова-тельность в объектную программу всего один раз,а в нужных точках вызы-вать ее для выполнения с текущими данными.Такая вызываемая последова-тельность команд,или своеобразная «программа в программе» называется подпрограммой или процедурой.
Подпрограмма представляет собой законченный модуль,который может вы-зываться любое число раз.Инициирование выполнения подпрограммы осущест-вляется путем указания ее имени в 3-байтной команде вызова CALL.Имя под-программы должно находиться в поле метки первой ее команды.При выполне-нии команды CALL текущее содержимое РС(адрес возврата) загружается в стек,а в РС загружается адрес перехода—второй и третий байт команды CALL. После этого начинает выполняться первая команда подпрограммы,затем вторая и т.д.Заключительной командой каждой подпрограммы должна быть 1-байтная команда возврата RET,которая извлекает адрес возврата из стека и передает его в РС.Следовательно,теперь будет выполняться команда,находящаяся в вызываю-щей программе сразу после команды CALL.
Практика программирования показывает,что целесообразно всегда запоми-нать содержимое регистров в начале и восстанавливать его в конце подпрог-рамм.Если,например, подпрограмма SUBR использует регистры А,В и С,она должна иметь следующий формат:
Метка Код Операнд Комментарий
SUBR: PUSH PSW;Запоминание содержимого регист-
PUSH B;ров в стеке
***
Команды подпрограммы
***
POP B;Восстановление прежнего содержи-
POP PSW;мого регистров
RET;Возврат
Подпрограммы с таким форматом быстрее и проще отлаживать.Из-за специфики стека содержимое регистров восстанавливается в обратном порядке.
Примечание. В большинстве приводимых далее подпрограмм команды PUSH в начале и команды POP в конце подпрограммы не приводятся,так как они удлиняют листинги,но дают мало новой информации. При наличии команд PUSH и POP такие подпрограммы должны быть несколько модифицированы. Пусть,например,заключительный фрагмент подпрограммы имеет следующий вид:
Метка Код Операнд Комментарий
***
INR A
RZ
INX B
RET
Когда в подпрограмме требуется временное запоминание и восстановление содержимого регистров,этот фрагмент несколько изменяется:
Метка Код Операнд Комментарий
SUBR: PUSH PSW
PUSH H
***
INR A
JZ NOT
INX B
NOT: POP H
POP PSW
RET
Дата добавления: 2015-07-11; просмотров: 82 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Сетка коэффициентов по квалификационной группе служащих | | | CПОСОБЫ ПЕРЕДАЧИ ПАРАМЕТРОВ |