Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсач гофаров 5 вариант.doc
Скачиваний:
6
Добавлен:
03.05.2019
Размер:
608.77 Кб
Скачать

3. Макросы

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

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

113.1. Макроопределения

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

<имя макроса> МАСRО <формальные параметры через запятую>

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

ЕNDM

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

SUM МАСRО Х,Y ;Х:=Х+У VAR MACRO NM, TP, VL

MOV АХ, Y NM D&TP VL

ADD X, АХ ENDM

ENDM

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

Тело макроса - это тот фрагмент программы, который затем и будет многократно копироваться. Тело может состоять из любого число любых предложений, в которых, естественно, можно использовать формальные параметры макроса. Как и в блоках повторения, формальные параметры могут обозначать любые части предложений тела. При этом, если рядом с параметром надо указать имя либо число или если параметр надо указать внутри строки, то следует использовать макрооператор & (см. D&ТР в макросе VAR). В теле макроса можно использовать комментарии, начинающиеся с двух точек с запятой. Завершает макроопределение директива ENDM) (end оf mасrо), Обратите особое внимание на то, что в этой директиве не надо повторять имя макроса (если здесь указать имя макроса, то это предложение будет рассматриваться как рекурсивный вызов макроса): Отметим также, что именно эта директива указывается и в конце блоков повторения (в ЯА эти блоки рассматриваются как специфический случай макросов).

Где размещать макроопределения? Они могут быть размешены в любом месте текста программы (по ним в машинную программу ничего не записывается), но обязательно до первой ссылки на этот макрос. Таким образом, в ЯА действует правило: сначала опиши макрос и только затем обращайся к нему.