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

Unknown Author

Макрооператор ;;

Если в теле блока повторения (и макроса) имеются комментарии (в конце каких-то предложений или как самостоятельные предложения), то они переносятся во все копии блока. Однако бывает так, что комментарий полезен при описании самого блока повторения, но совершенно не нужен в его копиях. В таком случае следует начинать комментарий не с одной точки с запятой, а с двух - такие комментарии не копируются. Например:

IRP R,<ах,вх>

;;восстановление регистров    ;восстановить АХ

восстановить R    POP АХ

POP R ;;стек ==> R ENDM

;восстановить ВХ POP ВХ

11.3. Макросы

С помощью блока повторения один раз описывается некоторый фрагмент программы, который затем многократно копируется макрогенератором. Но блоки повторения можно использовать, только если эти копии должны быть расположены рядом друг с другом. А что делать, если фрагмент программы должен повторяться, но в разных местах программы? В этом случае используются макросы: специальным образом описывается этот фрагмент программы (это и есть макрос) и ему дается имя, а затем в нужных местах программы выписывается ссылка на этот макрос (указывается его имя); когда макрогенератор просматривает текст программы и встречает такую ссылку, то он вместо нее подставляет в окончательный текст программы сам макрос - соответствующий фрагмент программы; и так делается для каждой ссылки на макрос, в каком бы место программы она ни встретилась.

При использовании макросов применяется следующая терминология. Описание макроса называется макроопределением, ссылка на макрос - макрокомандой, процесс замены макрокоманды на макрос - макроподстановкой, а результат такой подстановки - макрорасширением.

11J.1. Макроопределения

Описание макроса, т. е. макроопределение, имеет следующий вид:

<имя макроса> MACRO <формальные параметры через запятук»

<тело макроса>

ENDM

Два конкретных примера:

VAR MACRO NM,TP,VL NM D&TP VL ENDM

SUM MACRO X,Y ;X:«Х+Y

MOV AX,Y ADD X,AX ENDM

Первая строка макроопределения - это директива MACRO, которую принято называть заголовком макроса. В ней, во-первых, указывается имя, которое мы дали макросу, а во-вторых, через запятую перечисляются формальные параметры макроса. Необходимость в параметрах вызвана тем, что в общем случае макрос должен копироваться не в неизменном виде, а с некоторыми модификациями; параметры и обозначают те величины, которые влияют на эти модификации. Формальным параметрам можно давать любые имена, эти имена локализуются в теле макроса; если имя параметра совпало с именем другого объекта программы, то внутри макроопределения под этим именем понимается параметр, а не этот объект.

Тело макроса - это тот фрагмент программы, который затем и будет многократно копироваться. Тело может состоять из любого число любых предложений, в которых, естественно, можно использовать формальные параметры макроса. Как и в блоках повторения, формальные параметры могут обозначать любые части предложений тела. При этом, если рядом с параметром надо указать имя либо число