Ассемблер и программирование для IBM PC



       

ГЛАВА 20. Макросредства - часть 5


Ассемблер для IBM PC. Глава 20 22

INIT2 и первого расширения PROMPT. Для второго расширения PROMPT директива .LALL указывает ассемблеру на вывод в листинг комментария и макрорасширения. Заметим, однако, что комментарий, отмеченный двумя символами точка с запятой (;;) в макроопределении PROMPT, не распечатывается в макрорасшире ниях независимо от действия директив управления листингом.

------------------------------------------------------------ ------------------------------------------------------------ Рис.20.3. Распечатка и подавление макрорасширений в листинге.

ИСПОЛЬЗОВАНИЕ МАКРОКОМАНД В МАКРООПРЕДЕЛЕНИЯХ ------------------------------------------------------------

Макроопределение может содержать ссылку на другое макроопределение. Рассмотрим простое макроопределение DOS21, которое заносит в регистр AH номер функции DOS и выполняет INT 21H:

DOS21 MACRO DOSFUNC MOV AH,DOSFUNC INT 21H ENDM

Для использования данной макрокоманды при вводе с клавиатуры необходимо закодировать:

LEA DX,NAMEPAR DOS21 0AH

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

DISP MACRO CHAR MOV AH,02 MOV DL,CHAR INT 21H ENDM

Для вывода на экран, например, звездочки достаточно закодиро вать макрокоманду DISP '*'. Можно изменить макроопределение DISP, воспользовшись макрокомандой DOC21:

DISP MACRO CHAR MOV DL,CHAR DOS21 02 ENDM

Теперь, если закодировать макрокоманду DISP в виде DISP '*', то ассемблер сгенерирует следующие команды:

MOV DL,'*'

Ассемблер для IBM PC. Глава 20 23

MOV AH,02 INT 21H

ДИРЕКТИВА LOCAL ------------------------------------------------------------

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




Содержание  Назад  Вперед