Для тех случаев, когда нужно несколько раз повторять один и тот же
фрагмент программы в макроассемблере имеется несколько специальных
макрокоманд. Это операторы REPT, IRT и IRPC. Каждый из них
действует как макрокоманда в макрокоманде и приводит к генерации
следующего за ним участка программы, пока ассемблеру не встретится
операнд ENDM.
Для простого повторения последрвательности команд используется
макрокоманда REPT. Последовательность
REPT выражение
;... тело макрокоманды REPT
ENDM
дублирует команды, составляющих тело данной макрокоманды. Значение
выражения определяет число повторений текста.
С помощью макрокоманды IRP можно при каждом повторении
использовать разные параметры. При использовании конструкции
IRP фиктивный параметр,<список>
;... тело макрокоманды IRP
ENDM
ассемблер осуществляет столько проходов тела макрокоманды,
сколько указано элементов в списке. При каждом проходе ассемблер
подставляет вместо фиктивного параметра следующий по порядку
элемент списка. Элементы списка должны быть числовыми выражениями.
Если вы хотите использовать в списке символьные значения,
применяйте макрокоманду IRPC. Последователность
IRPC фиктивный параметр, строка символов
;... тело макрокоманды IRPC
ENDM
осуществляет по одному проходу тела макрокоманды для каждого
символа. При этом фиктивный параметр ассемблер каждый раз заменяет
следующим по порядку символом из строки. На Фиг. 6.7 показаны
примеры применения описанных макрокоманд повтора.
Microsoft (R) Macro Assembler Version 5.00 4/2/89 16:06:54
Фиг. 6.7 Макроповторения Page 1-1
PAGE ,132
TITLE Фиг. 6.7 Макроповторения
0000 CODE SEGMENT
ASSUME CS:CODE,DS:CODE
REPT 3 ; Повторить команду 3 раза
INC AX
ENDM
0000 40 1 INC AX
0001 40 1 INC AX
0002 40 1 INC AX
IRP VALUE,<5,10,15,20>
ADD AX,VALUE
ENDM
0003 05 0005 1 ADD AX,5
0006 05 000A 1 ADD AX,10
0009 05 000F 1 ADD AX,15
000C 05 0014 1 ADD AX,20
IRPC CHAR, ABCD
ADD AX,CHAR&X
ENDM
000F 03 C0 1 ADD AX,AX
0011 03 C3 1 ADD AX,BX
0013 03 C1 1 ADD AX,CX
0015 03 C2 1 ADD AX,DX
0017 CODE ENDS
END
Фиг. 6.7 Макрокоманды повтора