В этом случае ассемблер обращается к файлу MACRO.LIB (в нашем примере) на дисководе С и включает в программу оба макроопределения INIT и PROMPT. В этом примере требуется только INIT. Ассемблерный листинг будет содержать копию макроопределения, отмеченного символом С в 30 4-й 0 колонке LST-файла. Следом за макрокомандой идет ее расширение с объектным кодом и с символом плюс (+) в 31 4-й колонке.
8. Символ (&) указывает ассемблеру на сцепление (конкатенацию) текста или символов. Следующая макрокоманда MOVE генерирует команду MOVSB или MOVSW:
MOVE MACRO TAG
REP MOVS&TAG
ENDM
Теперь можно кодировать макрокоманду в виде MOVE B или MOVE W. В результате макрорасширения ассемблер сцепит параметр с командой MOVS и получит REP MOVSB или REP MOVSW.
9. Ассемблер поддерживает ряд условных директив. Каждая директива IF должна иметь спаренную с ней директиву ENDIF для завершения IF-структуры и возможную директиву ELSE для альтернативного действия:
IF (условие)
Условный
Блок
ELSE
.
.
ENDIF
Отсутствие директивы ENDIF вызывает сообщение об ошибке. Если проверяемое условие истинно, то ассемблер выполняет условный блок до директивы ELSE или при отсутствии ELSE - до директивы ENDIF. Если условие ложно, то ассемблер выполняет условный блок после директивы ELSE, а при отсутствии ELSE вообще обходит условный блок.
Ниже приведены некоторые условные директивы:
IF выражение - Если выражение не равно нулю, ассемблер обрабатывает операторы в условном блоке.
IFE выражение - Если выражение равно нулю, ассемблер обрабатывает операторы в условном блоке.
IFIDN <арг-1>,<арг-2> - Если строка первого аргумента идентична строке второго аргумента, то ассемблер обрабатывает операторы в условном блоке. Аргументы должны быть в угловых скобках.
IFDIF <арг-1>,<арг-2> - Если строка первого аргумента отличается от строки второго аргумента, то ассемблер обрабатывает операторы в условном блоке. Аргументы должны быть в угловых скобках.
IFDEF идентификатор - Если идентификатор определен в программе, то ассемблер обрабатывает операторы в условном блоке.
IFNDEF идентификатор - Если идентификатор не определен в программе, то ассемблер обрабатывает операторы в условном блоке.
10. Макроопределение может содержать условные директивы, которые проверяют важные условия. Если условие истинно, то ассемблер должен прекратить дальнейшее макрорасширение. Для этого служит директива EXITM: