Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania_k_kursovomu_proektu_VMSi....doc
Скачиваний:
4
Добавлен:
20.04.2019
Размер:
4.98 Mб
Скачать

Параметры подпрограммы

Важный аспект понятия подпрограммы связан со способом пере­дачи данных, которые называются параметрами или аргументами, между главной программой и подпрограммой. Существует несколько способов решения этой проблемы. Во-первых, аргументы можно за­гружать в общие регистры перед переходом на подпрограмму. Под­программа, написанная в предположении, что аргументы находятся в регистрах, выполняется и оставляет свои результаты также в регистрах. Главная программа после возврата из подпрограммы берет результаты из общих регистров.

Иллюстрирует такой подход программа в табл. 5.5.

Таблица 5.5

Пример передачи параметров от главной программы в подпрограмму через общие регистры

Ячейка памяти

Команда на машин ном язык

Команда в

символической форме

Комментарий

. . . . . . . . .

0020

70

LDR 0

Загрузка первого аргумента в регистр D

0021

80

80

0022

00

00

0023

0D

MOV 0 to D

0024

70

LDR 0

Загрузка второго аргумента в регистр Е

0025

80

80

0026

50

50

0027

MOV 0 to E

0028

7F

JMS

Переход на подпрограмму в ячейке 9000

0029

90

90

002А

00

00

002В

Точка возврата из подпрограммы.

. . . . . . . . .

Предполага­ется, что аргументы находились в ячейках памяти 8000 и 8050. Глав­ная программа загружает их в общие регистры D и Е, после чего пере­дает управление на подпрограмму в ячейке 9000 с помощью команды «переход на подпрограмму».

Если нужные подпрограмме аргументы находятся в последователь­ных ячейках памяти, в главной программе перед переходом на под­программу можно загрузить в регистры Н и L (или в любую другую пару общих регистров) адрес первого аргумента. Ответственность за выборку аргументов возлагается при этом на подпрограмму. Достоинство этого способа в том, что не нужно загружать сразу все аргументы в регистры — программа будет выбирать из их памяти по мере необходи­мости. Такой подход, очевидно, предпочтительнее, когда число аргу­ментов превышает число свободных общих регистров. Кроме того, этот подход решает проблему обратной передачи результатов. Например, достаточно под результаты зарезервировать часть списка аргументов.

В рассмотренном случае главная программа загружала в регистры Н и L адрес первого аргумента и тем самым передавала в подпрограмму список аргументов. Возможен вариант, когда главная программа передает в подпрограмму не список самих аргументов, а список адресов аргументов. В этом случае в регистры Н и L загружается адрес первого адреса в списке адресов аргументов. Таким образом, чтобы получить аргумент, подпрограмма должна сначала получить адрес из списка адресов, а уже затем сам аргумент. Этот способ обладает тем преимуществом, что аргументы не обязательно должны располагаться в последовательных ячейках памяти, а могут быть разбросаны про­извольным образом.