
- •Префиксы повторения
- •3.11.6. Команды управления микропроцессором
- •Команды управления флагами
- •Команды синхронизации
- •3.11.7. Принципы кодирования команд
- •3.11.8. Время выполнения команд
- •3.12. Организация подпрограмм
- •3.12.1. Директивы описания подпрограмм
- •3.12.2. Передача параметров в подпрограммы
- •Передача параметров через регистры
- •Передача параметров через общие ячейки памяти
- •Передача параметров через зоны параметров
- •Передача параметров через стек
- •3.13. Организация системы прерываний
- •3.13.1. Внешние прерывания
- •3.13.2. Внутренние прерывания
- •3.13.3. Обслуживание прерываний
- •3.14.Нестандартные типы данных
- •3.14.1. Структуры
- •3.14.2. Записи
- •3.15.Макрокоманды
- •3.15.1. Макроопределения и макровызовы
- •3.15.2.Сравнение макрокоманд и подпрограмм
- •3.15.3. Макрокоманды повторения
- •3.15.4. Библиотеки макроопределений
- •IncludeИмя_библиотеки
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, образуя имена регистров.