Часто встречается посл – ти команд, кот. выполняют одну ф – цию, используя разные данные. Эти посл – ти организуют в подпрограмме котор. может вызываться из основн. программ.
Подпрогр. – это законченный сегмент ( или модуль ) прграммы, кот. можно вызвать любое число раз. 273
Достоинства:
1. Сложную прогр. можно разделить на небольшие модули, разработка кот. может производиться различными программистами.
2. Каждую подпрогр. можно отладить отдельно.
3. Подпрограмма сокращает длину общей программы.
4. Отлаженные подпрогр. можно хранить в библиотеках и использовать в разных задачах.
Недостатки:
1. вызов и возврат подпрогр. затрачивает время, поэтому маленькие подпрогр. неэффективны.
Вызов подпрогр. осуществляется командой:
CALL SUBR адрес
При вызове подпр. МП заносит в вершину стека содержимое РС ( адрес след. команды за командой CALL ) – это адрес возврата.
RET – команда возврата ( при этом из вершины стека МП извлекает 2 – байтовое число и помещает в РС и происходит возврат в основ. программу )
Необходимо, чтобы подпрогр. не меняла содержимое регистров, кот. использ. в основн. программе. Для этого надо сохранить содержимое регистров:
сохранить в стеке содержимое регистр. перед вызовом подпрогр., после восстановить.
В самом начале самой подпрогр. занести в стек содержимое регистров и перед выходом из подпрогр. восстановить содержимое этих регистров.
SUBR: PUSH PSW; занести в стек ( A, F )
PUSH B; занести в стек ( В, С )
……
POP B; восстановить ( B, C )
POP PSW; восстановить ( А, F )
RET
SUBR1: …….
DCR A
RZ; возврат, если ( А ) = 0
INI B
POP D
POP H регистры не восстанавливаются
RET
SUBR1: ……
DCR A
JZ EXIT; выход, если ( А ) = 0
INX B
EXIT: POP D
POP H
RET
Чтобы подпрогр. правильно использовать необходимо произвести спецификацию, в кот. указывается:
1. входн. прог – мы подпрогр., т. е. где наход. данные, обрабатываемые подпрогр.
2. выходные пар – ры подпрогр., т. е. где будут размещаться рез – ты работы под – мы.
3. Какие регистры будут использ. в подпрогр.
В Ассемблере спецификац. размещается в комментариях в начале подпрограммы:
; подпрогр. сложения 2 – х целых чисел ( двоичных ) формата 8 * N
; входн. пар – ры: регистры В, С – адрес мл. байта слогаемого 1
; HL – адрес мл. байта слогаемого 2
; рег. Е – кол – во байт N числа
; выход. пар – ры: регистры В, С – адрес мл. байта рез – та
; CY – признак переполнения суммы
; используются все регистры
Возможно ситуация, когда после вызова подпр., она вызывает др., а следующ. ещё одну. Такие подпрограммы наз. вложенными.
Способы передачи пар – ов:
1. Передача пар – ов через яч. памяти ( через адреса яч. памяти ). К этим адресам может обращаться и основн. и подпрогр.
Такие пар – ры наз. глобальные ( общедоступные )
Недостаток – искажение пар – ов и трудность обнаружения виновника.
2. С помощью регистров МП – можно передать как данные, так и адреса яч. памяти.
Недостаток – малое кол – во регистров.
Такие пар – ры наз. локальными.
3. Передача пар – ов через стек – перед вызовом подпрогр. основн. прогр. заносит в стек пар – ры, кот. будут использ. в подпрогр., после она вызывает из стека пар –ры.