Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Команды подпрограммы






Подпрограммы как средство модульного программирования

В большинстве прикладных программ некоторые последовательности ко-манд встречаются не один раз, но оперируют разными данными.Такие после-довательности можно оформить в макрокоманды.Однако расширения мак-рокоманд целиком включаются в объектную программу и значительно уве-личивают ее длину.Гораздо удобнее включить повторяющуюся последова-тельность в объектную программу всего один раз, а в нужных точках вызы-вать ее для выполнения с текущими данными.Такая вызываемая последова-тельность команд, или своеобразная «программа в программе» называется подпрограммой или процедурой.

Подпрограмма представляет собой законченный модуль, который может вы-зываться любое число раз.Инициирование выполнения подпрограммы осущест-вляется путем указания ее имени в 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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.