Читать «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

1.9

0

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

Отметим, что вложенность макрооператоров % не допускается (например, в конструкции %5-%К будет зафиксирована ошибка "неописанное имя %К") и что концом константного выражения считается первый символ (например, запятая, угловая скобка или знак равенства), который не может по синтаксису входить в константные выражения (например, при значении 4 у константы К параметр %К-1+К=К будет преобразован в 7=К).

Отметим также, что в последовательности символов (во втором операнде) IRPC-блока знак % рассматривается как обычный символ, а не как макрооператор.