Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 134

Unknown Author

Здесь р - некоторое имя, оно играет роль формального (фиктивного) параметра и может использоваться в предложениях тела, vi - это фактические параметры; это любые тексты (возможно, и пустые), но, чтобы не было путаницы, они должны быть сбалансированы по кавычкам и не должны содержать запятые, точки с запятой и уголки вне кавычек (если это ограничение надо нарушить, то следует воспользоваться макрооператорами - см. разд. 11.2.4). Параметры vi перечисляются через запятую, а вся их совокупность обязательно заключается в угловые скобки.

Встречая такой блок, макрогенератор заменяет его на к копий тела (по одной на каждый фактический параметр), причем в i-й копии все вхождения имени р заменяются на vi. Например:

IRP REG,<AX,CX,SI>    PUSH АХ

PUSH CX PUSH SI

PUSH REG ENDM

Отметим, что формальный параметр локализуется в теле блока (им нельзя пользоваться вне блока) и может быть любым именем. Бели оно совпадает с именем другого объекта программы, то в теле блока оно обозначает именно параметр, а не этот объект. Например, в блоке

IRP ВХ,<1,5>

ADD АХ,ВХ ENDM

имя ВХ обозначает параметр, а не регистр, поэтому по данному блоку будет построен следующий фрагмент окончательной программы:

ADD АХ,1 ADD АХ,5

Замены формального параметра на фактические - это чисто текстуальные подстановки, без учета смысла: просто один участок текста (р) заменяется на другой (vi). При этом параметром р можно обозначить любую часть предложения (в частности, участки комментария) или даже целиком все предложение (однако два и более предложений он не может обозначать), лишь бы после замены р на vi получались правильные предложения ЯЛ. Например:

Отметим также, что в теле блока повторения заменяется только формальный параметр, другие имена (например, имена констант) переносятся в копии тела без изменений. Например:

N EQU 1

IRP Р,<А,В>

N EQU 1 A EQU N

(во не A EQU 1 )

Другие особенности записи формальных и фактических параметров будут рассмотрены в разд. 11.2.4.

11J23. IRPC-блокн

Блоки этого типа записываются следующим образом:

IRPC p,sl...sk <тело>

ENDM

И здесь р - формальный параметр, а вот si - это символы. Это могут быть любые символы, кроме пробелов и точек с запятой (считается, что с точки с запятой начинается комментарий, а пробел заканчивает операнд; если надо указать точку с запятой или пробел, то всю последовательность символов следует заключить в угловые скобки - см. разд. 11.2.4). Встречая IRPC-блок, макрогенератор заменяет его на к копий тела блока (по одной на каждый символ), причем в i-й копии все вхождения параметра р будут заменены на символ si. Пример:

ADD AX,1 ADD AX,7 ADD AX,W

Р EQU N    В EQU N

ENDM

$

IRPC D,17W ADD AX,D ENDM

11.2.4. Макрооператоры

При использовании блоков повторения (и макросов, которые будут рассмотрены чуть позже) возникает ряд проблем с записью их формальных и фактических параметров. Эти проблемы решаются с помощью так называемых макрооператоров - операторов, разрешенных к применению только в конструкциях макроязыка.