PROMPT MACRO MESSGE

; Эта макрокоманда выводит сообщения на экран

MOV AH,09H

LEA DX,MESSGE

INT 21H

ENDM

 

Так как по умолчанию в листинг попадают только команды, генерирующие объектный код, то ассемблер не будет автоматически выдавать и комментарии, имеющиеся в макроопределении. Если необходимо, чтобы в расширении появлялись комментарии, следует использовать перед макрокомандой директиву .LALL которая кодируется вместе с лидирующей точкой:

 

LALL

PROMPT MESSAG1

 

Макроопределение может содержать несколько комментариев, причем одни из них могут выдаваться в листинге, а другие - нет. Для подавления вывода комментария в листинг необходимо закодировать перед комментарием два символа "точка с запятой" (;;). По умолчанию в ассемблере действует директива .XALL, которая выводит в листинг только команды, генерирующие объектный код. Можно запретить появление в листинге ассемблерного кода в макрорасширениях, особенно при использовании макрокоманды в одной программе несколько раз. Для этого служит директива .SALL, которая уменьшает размер выводимого листинга, но никак не влияет на размер объектного модуля.

Директивы управления листингом .LALL, .XALL, .SALL сохраняют свое действие по всему тексту программы до тех пор, пока другая директива листинга не изменит его. Эти директивы можно размещать в программе так, чтобы в одних макрокомандах распечатывались комментарии, в других - макрорасширения, а в третьих - подавлялся вывод в листинг.

6. В некоторых макрокомандах требуется определять элементы данных или метки команд. При использовании такой макрокоманды в программе более одного раза происходит также неоднократное определение одинаковых полей данных или меток. В результате ассемблер выдаст сообщения об ошибке из-за дублирования имен.

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

 

LOCAL dummy-1,dummy-2,... ;Формальные параметры

 

7. Для многократного использования макроопределений создается библиотека макрокоманд на магнитном диске при использовании любого описательного имени, например, MACRO.LIB:

 

INIT MACRO CSNAME,DSNAME,SSNAME

.

.

ENDM

PROMPT MACRO MESSGE

.

.

ENDM

 

Теперь для использования любой из катологизированных макрокоманд вместо MACRO-определения в начале программы следует применять директиву INCLUDE:

 

INCLUDE C:MACRO.LIB

.

.