35. Макродирективы повторения, управления процессом генерации, отображения сообщений во время макрогенерации.

В языке ассемблера предусмотрены несколько циклических директив, предназначенных для генерации повторяющихся блоков операторов: WHILE, REPEAT, IRP и IRPC. В отличие от команды LOOP, эти директивы работают только во время компиляции программы, причем в качестве счетчика и условия завершения цикла выступают константные выражения.

WHILE константное_выражение
Позволяет повторить некоторый блок операторов в зависимости от значения указанного в ней логического выражения. При выполнении этих директив макрогенератор будет вставлять в макрорасширение указанное количество строк, пока константное выражение не станет равно 0.

REPT константное_выражение
Предназначена для повторения некоторого блока операторов заданное количество раз. Отличие – REPT автоматически каждую итерацию уменьшает константное выражение на 1, а в WHILE его нужно изменять вручную, но не обязательно на 1.

IRP формальный_аргумент, <строка1, строка2…>
Повторяет блок операторов столько раз, сколько в списке в угловых скобках строк. На каждой итерации формальный аргумент принимает значение одной из строк, что дает возможность через форм. арг. к ней обратиться, пока список не исчерпается.

IRPC формальный_аргумент, <строка>
Принцип работы аналогичен IRP, но вместо списка строк передается одна строка и каждую итерацию формальному аргументу присваивается значение одного ее символа.



Существует две основных директивы управления процессом макрогенерации:

EXITM
Ее действие заключается в том, что она немедленно прекращает процесс генерации макрорасширения, начиная с того места, где она встретилась в макроопределении.

GOTO имя_метки
Переводит процесс генерации макроопределения в другое место, прекращая тем самым последовательное разворачивание строк макроопределения. Метка, на которую передается управление, имеет специальный формат:


Так же имеются средства для вывода текстового сообщения во время трансляции программы — директивы:
DISPLAY “сообщение”
%OUT сообщение
В результате обработки этих директив на экран (стандартный выход) будут выведены тексты сообщений. Если эти директивы использовать совместно с директивами условной компиляции, то, к примеру, можно отслеживать путь, по которому осуществляется трансляция исходного текста программы.

17.07.2015