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


          

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


Ассемблер для 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, даже перед комментариями. Общий формат имеет следующий вид:

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