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

3.15.2.Сравнение макрокоманд и подпрограмм

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

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

Отсюда очевидно, что повторяющиеся фрагменты малого объема целесообразно оформлять в виде макрокоманд, а большого объема в виде подпрограмм.

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

Пример 3.135:

Создать макрокоманду для модификации адресов при обработке массивов.

В общем случае в зависимости от вида обработки и типа элементов массивов модификация адресов выполняется путем увеличения или уменьшения содержимого определенного регистра на некоторое число.

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

Modif MACRO Operation, Reg, Const

Operation Reg, Const

ENDM

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

Modif ADD, BX, 2 ; (BX)=(BX)+2

Modif SUB, SI, 4 ; (SI)=(SI)4

Modif ADD, DI, TYPE Arr ; (DI)=(DI)+TYPE Arr

Макроопределения могут быть сведены в библиотеку, из которой они простейшим образом могут использоваться в дальнейших разработках.

3.15.3. Макрокоманды повторения

Макрокоманды повторения обеспечивают дублирование тела макроопределения по текущему адресу трансляции. К ним относятся макрокоманды REPT,IRPиIRPC.

Формат макроопределения REPTимеет вид:

REPTЧисловое_выражение

. . . . . . . ; Тело макроопределения

. . . . . . . ; (описание выполняемых

. . . . . . . ; действий)

ENDM

Количество повторений тела макроопределения в этом случае определяется значением числового выражения.

Пример 3.136:

REPT 3 ; Эквивалентно

SHR AX, 1 ; SHR AX, 1; SHR AX, 1; SHR AX, 1

ENDM

Формат макроописания IRPимеет вид:

IRPФиктивный_параметр, <Список значений>

. . . . . . . . . ; Тело макроопределения

. . . . . . . . . ; (описание выполняемых

. . . . . . . . . ; действий)

ENDM

Количество повторений тела макроопределения в этом случае определяется количеством элементов списка. При каждом повторении вместо фиктивного параметра в тело макроопределения подставляется очередной элемент списка значений.

Пример 3.137:

IRPreg, <AX,BX,CX,DX> ; Эквивалентно

PUSH reg ; PUSH AX, PUSH BX, ENDM ; PUSH CX, PUSH DX

Формат макроописания IRPCимеет вид:

IRPC Фиктивный_параметр, Строка_символов

. . . . . . . . . ; Тело макроопределения

. . . . . . . . . ; (описание выполняемых

. . . . . . . . . ; действий)

ENDM

Количество повторений тела макроопределения в этом случае определяется количеством символов в строке. При каждом повторении вместо фиктивного параметра в тело макроопределения подставляется очередной символ строки.

Пример 3.138:

IRPCChar, ABCD ; Эквивалентно

SHL Char&X, 1 ; SHL AX, 1; SHL BX, 1; SHL CX, 1;

ENDM ; SHL DX, 1

В этом примере использован оператор конкатенации &. Он обеспечивает сцепление двух строк в одну и записывается в формате:

Строка1 & Строка2

В рассмотренном примере оператор & сцепляет значение фиктивного параметра Char с неизменяемой строкой X, образуя имена регистров.