Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 3).doc
Скачиваний:
143
Добавлен:
08.03.2015
Размер:
540.67 Кб
Скачать

3.12.2. Передача параметров в подпрограммы

Любая подпрограмма выполняет свои действия по отношению к одним и тем же элементам архитектуры, поскольку они в ней жестко определены. Поэтому без принятия дополнительных мер подпрограмма всегда обрабатывает одни и те же данные. Например, при любом вызове процедуры SubW из примера 3.112 всегда будет вычисляться разность S=AB.

Однако, в прикладных программах часто требуется выполнять одни и те же действия над различными данными. Для обработки различных данных с помощью одной подпрограммы необходимо каким-либо образом сообщить ей о размещении обрабатываемых данных и формируемых результатов. Это обеспечивается с помощью передачи параметров в подпрограмму. При этом элементы архитектуры, через которые передаются параметры, называются формальными параметрами.

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

Передача входных параметров всегда осуществляется перед вызовом подпрограммы, а выходных после возврата из нее. Основная программа, из которой вызывается процедура, часто называется макроуровнем программы. Таким образом, передача параметров в подпрограмму всегда осуществляется на макроуровне, а их обработкав самой подпрограмме.

Существуют различные способы передачи параметров в подпрограмму, накладывающие на нее свой отпечаток.

Передача параметров через регистры

В этом случае входные параметры перед вызовом подпрограммы загружаются в РОНы МП, с которыми она работает. После вызова подпрограмма выполняет необходимые действия и оставляет результат тоже в регистрах. Пересылка результата в память осуществляется после возврата из подпрограммы.

Общая структура программы в этом случае будет иметь вид:

NamePROC

;Обработка данных

RET

Name ENDP

;Макроуровень программы

Start:. . . . . . .

;Передача входных параметров

CALL Name ; Обработка данных

;Передача выходных параметров

Пример 3.114:

Вычислить S=A+B,гдеAиBнекоторые слова в памяти.

Текст программы для решения этой задачи будет иметь вид:

AddWRP PROC

ADD AX, DX ;Сложение слов

RET

AddWRP ENDP

;Макроуровень программы

Start: . . . . . . .

MOV AX, A1 ;Передача входных

MOV DX, B1 ;параметров

CALL AddWRP ;Вычисление S1=A1+B1

MOV S1, AX ;Передача выходного

. . . . . . . ;параметра

MOV AX, A2 ;Вычисление S2=A2+B2

MOV DX, B2

CALL AddWRP

MOV S2, AX

Достоинством этого способа является простейшая реализация подпрограмм, а недостатком жесткое ограничение на количество передаваемых параметров.

Передача параметров через общие ячейки памяти

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

При этом общая структура программы будет иметь вид:

Name PROC

;Чтение входных параметров из общих ячеек

;Обработка данных

;Запись выходных параметров в общие ячейки

RET

Name ENDP

;Макроуровень программы

Start: . . . . . . .

;Передача входных параметров в общие ячейки

CALL Name ;Обработка данных

;Передача выходных параметров из общих ячеек

Для реализации этого способа должны быть описаны общие ячейки памяти, которые являются формальными параметрами.

Пример 3.115:

ВычислитьS=A+B,гдеAиBнекоторые слова в памяти.

Для передачи параметров в данном случае потребуется три слова в памяти, и текст программы для решения этой задачи будет иметь вид:

FormA DW? ;Описание общих

FormB DW? ;ячеек памяти

FormS DW ?

. . . . . . .

. . . . . . .

AddWMP PROC

MOV AX, FormA ;Чтение параметра

ADD AX, FormB ;Сложение слов

MOV FormS, AX ;Запись параметра

RET

AddWMP ENDP

;Макроуровень программы

Start: . . . . . . .

MOV AX, A1 ;Передача входных

MOV FormA, AX ;параметров

MOV AX, B1

MOV FormB, AX

CALL AddWMP ;Вычисление S1=A1+B1

MOV AX, FormS ;Передача выходного

MOV S1, AX ;параметра

. . . . . . .

MOV AX, A2 ;Вычисление S2=A2+B2

MOV FormA, AX

MOV AX,B2

MOV FormB, AX

CALL AddWMP

MOV AX, FormS

MOV S2, AX

Достоинством этого способа является неограниченное количество передаваемых параметров, а недостатком необходимость описания общих ячеек и усложнения макроуровня программы.