В качестве элементов генерируемого текста в теле макроопределения могут быть использованы макрооператоры.
Оператор замены & обеспечивает замену в тексте формального параметра на значение соответствующего ему фактического параметра макроопределения. Символ & употребляется как перед, так и после имени формального параметра и служит для выделения параметра в строке символов или в строке, содержащей кавычки.
Во вложенных макроопределениях оператор замены может быть использован для задержки замены формального параметра действительным значением, для чего используется более общая форма оператора замены, в которой символ & может быть указан несколько раз. MASM трактует количество рядом стоящих символов & как глубину вложенности макроопределений (относительно текущего уровня), на которой следует осуществлять замену формального параметра.
Пример:
alloc MACRO x
IRP z,<1,2,3> x&&z DB z
ENDM
ENDM
В этом примере замена формального параметра x осуществляется немедленно при вызове макроопределения. Замена параметра z будет задержана до начала обработки блока повторения IRP с тем, чтобы параметр z получал значения из указанного списка. Таким образом, параметр z будет замещаться значением элемента списка каждый раз при переходе к следующему элементу списка блока повторения. В итоге по макрокоманде
alloc var
будет сгенерировано макрорасширение
var1 DB 1
var2 DB 2
var3 DB 3
Текстовый оператор литерала указывает MASM, что заданный внутри скобок < и > текст следует трактовать как простой литеральный элемент независимо от того, содержит ли он запятые, пробелы или другие ограничители. Чаще всего этот оператор используется в макровызовах и директивах IRP для того, чтобы значения списка параметров обрабатывались как один параметр.
Кроме того, этот оператор используется в тех случаях, когда необходимо, чтобы MASM трактовал некоторые специальные символы (например, ; или &) как литералы. Например, в выражении <;> точка с запятой рассматривается как точка с запятой, а не как начало комментария.
Символьный оператор литерала ! отличается от текстового лишь тем, что в нем в качестве литерала рассматривается только непосредственно следующий за ! символ. Например, выражения !; и <;> эквивалентны.
Оператор выражения % указывает MASM, что данный текст следует трактовать как выражение. MASM вычисляет значение выражения с учетом основания системы счисления встречающихся в выражении чисел и замещает текст этим значением. Текст должен представлять корректное выражение.
Оператор выражения обычно используется в макровызовах, когда в макроопределение необходимо передать значение выражения, а не его текстовую форму.
Пример:
area MACRO par
DW &par
ENDM
sum1 EQU 100
sum2 EQU 200
В результате обработки макровызова
area %(sum1+sum2)
будет сгенерировано макрорасширение
DW 300
Оператор макрокомментария ;; определяет, что остаток строки является макрокомментарием.
В отличие от обычного комментария, который обозначается одинарными точкой с запятой и также может встречаться в макроопределениях, макрокомментарий в текст макрорасширения не попадает. Он присутствует лишь в теле макроопределения.