INIT CSEG,DATA,STAC

 

В этом случае ассемблер обращается к файлу 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: