Читать «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.
11
Блоки этого типа записываются следующим образом:
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. Макрооператоры
При использовании блоков повторения (и макросов, которые будут рассмотрены чуть позже) возникает ряд проблем с записью их формальных и фактических параметров. Эти проблемы решаются с помощью так называемых макрооператоров - операторов, разрешенных к применению только в конструкциях макроязыка.