Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 136
Unknown Author
Как было сказано, фактические параметры IRP-блока не должны содержать запятые, точки с запятой и уголки, а во втором операнде IRPC-блока нельзя указывать пробелы и точки с запятой. Эти ограничения связаны с тем, что иначе возможна путаница: например, если внутри фактического параметра IRP-блока указать запятую (скажем: 1,2), тогда будет непонятным, что означает эта запись -то ли два параметра, разделенных запятой, то ли один параметр. Так вот, если надо нарушить указанные ограничения, тогда весь фактический параметр IRP-блока или всю последовательность символов в IRPC-блоке надо заключить в угловые скобки (например: <1,2>), причем текст внутри этих скобок должен быть сбалансирован по уголкам. При этом считается, что внешние угловые скобки не относятся к параметру или последовательности, что они лишь указывают их границы.
Примеры:
IRP VAL,«1,2>,3>
DB
1/2
DB VAL
DB
3
ENDM
IRPC S,<A;B>
DB
'A'
DB '&S'
DB
ENDM
DB
'B'
А что делать, если внутри фактического параметра надо указать непарный уголок или кавычку? Для задания этих и других спецсимволов (вне или внутри угловых скобок) предусмотрен следующий макрооператор:
1<СИМВОЛ>
Смысл этой записи: сам символ ! "погибает" (не переносится в окончательный текст), но следующий за ним символ трактуется как обычный символ, а не как символ, играющий какую-то специальную роль. Например:
IRP Х,<А!>В,Привет 1, ПК!!> DB 'А>В'
DB '&Х' DB 'Привет, ПК! '
ENDM
Макрооператор ! можно использовать только при записи фактических параметров IRP-блоков (и макросов), тогда как в последовательности символов (во втором операнде) IRPC-блока знак ! рассматривается как обычный символ. Указывать в этой последовательности уголки можно сколько угодно раз, если эта последовательность не начинается с открывающей угловой скобки, а если начинается - пока нет баланса угловых скобок.
В макроязыке есть еще один макрооператор, используемый при записи фактических параметров IRP-блоков (и макросов):
%<константное выражение>
Встретив такую конструкцию в фактическом параметре, макрогенератор вычисляет указанное выражение и подставляет его значение вместо всей этой конструкции. Например:
К EQU 4
DW К+1 DW 5 DW W5
IRP A,<K+1,%K+1,W%K+1>
DW А
ENDM
Отметим, что вложенность макрооператоров
Отметим также, что в последовательности символов (во втором операнде) IRPC-блока знак