Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
178.18 Кб
Скачать

13. Макроопределения

Макроопределения подобны подпрограммам и представляют собой "мини-программы", которые можно несколько раз вставлять в исходные программы. Макроопределения являются последовательностью операто­ров на языке ассемблера (команд и псевдооператоров). После того как макроопределение задано, его имя можно использовать в исходной программе вместо соответствующей последовательности команд.

13.1. Сравнение макроопределений и процедур

И макроопределения, и процедуры предоставляют возможность краткой ссылки на часто используемую последовательность команд. Однако, между ними существует и различие.

Коды команд процедуры входят в программу однократно, и микропроцессор передает им управление по мере необходимости.

Коды команд макроопределения могут встречать­ся в программе неоднократно. Ассемблер заменяет каждое упоминание имени макроопределения на те команды, которые оно представляет, т.е. Ассемблер "расширяет" макроопределение.

Следовательно, при исполнении программы микропроцессор исполняет команды макроопределения "непосредст­венно", не передавая управление в другое место памяти. Таким образом, имя макроопределения представля­ет собой директиву Ассемблера; оно служит командой Ассемблеру, а не микро­процессору.

По сравнению с процедурами макроопределения имеют три преимущества:

1. Макроопределения динамичны. За счет изменения входных параметров макроопределения можно изменить не только объекты, которыми оно манипули­рует, но и выполняемые над ними действия. Напротив, в случае процедуры можно изменять только передаваемые ей данные. Это делает процедуры гораздо менее гибкими.

2. Применение макроопределений вместо процедур ускоряет исполнение программ, так как микропроцессору не надо отвлекаться на выполнение команд вызова процедуры и возврата из нее.

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

Однако макроопределения имеют основной недостаток, которого лишены процедуры: при их применении объектные программы становят­ся длиннее, поскольку макроопределения расширяются при каждом их появле­нии и память заполняется повторяющимися последовательностями команд.

13.2. Состав макроопределений

Каждое макроопределение имеет три части:

1. Заголовок – псевдооператор MACRO. Формат:

имя MACRO [список формальных параметров]

Псевдооператор присваивает имя последовательности операторов языка ассемблера. В поле метки указано имя макроопределения, а в поле операнда – необязательный список формальных па­раметров. В списке формальных параметров указываются переменные – входные параметры, которые можно изменять при каждом вызове макроопределения.

2. Тело – последовательность операторов Ассемблера (команд и псевдоопера­торов), которые задают действия, выполняемые макроопределением.

3. Концевик – псевдооператор ENDM, который отмечает конец макроопределе­ния.

Пример. Макроопределение для сложения значений размером в слово:

ADD_WORDS MACRO TERM1, TERM2, SUM

MOV AX, TERM1

ADD AX, TERM2

MOV SUM, AX

ENDM

Для Ассемблера безразлично, что будет указано в качестве операндов макроопре­деления: имена регистров, ячейки памяти или непосредственные значения. Конеч­но, непосредственное значение нельзя использовать в качестве операнда SUM. Если окончательный результат имеет допустимую форму, то Ассемблер выполняет подстановку операндов.

Пример. Можно сложить содержимое двух ячеек памяти с помощью оператора

ADD_WORDS PRICE, ТАХ, COST

Вместо этого оператора Ассемблер вставит в программу следующие команды:

МOV АX, PRICE

АDD AX, TAX

MOV COST, AX

Можно сложить содержимое двух регистров, указав оператор

ADD_WORDS BX, CX, DX

На этот раз Ассемблер вставит команды

MOV АХ, ВХ

ADD АХ, СХ

MOV DX, AX

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]