|
Для тех случаев, когда нужно несколько раз
повторять один и тот же
фрагмент программы в макроассемблере
имеется несколько специальных
макрокоманд. Это операторы REPT, IRT и
IRPC. Каждый из них
действует как макрокоманда в макрокоманде
и приводит к генерации
следующего за ним участка программы, пока
ассемблеру не встретится
операнд ENDM.
Для простого повторенияпоследрвательности команд используется
макрокоманда REPT. Последовательность
REPTвыражение
;... тело макрокоманды REPT
ENDM
дублирует команды, составляющих тело
данной макрокоманды. Значение
выражения определяет число повторений
текста.
С помощью макрокоманды IRP можно при
каждом повторении
использовать разные параметры. При использовании
конструкции
IRPфиктивный параметр,<список>
;... тело макрокоманды IRP
ENDM
ассемблер осуществляет столько проходов
тела макрокоманды,
сколько указано элементов в списке. При
каждом проходе ассемблер
подставляет вместо фиктивного параметра
следующий по порядку
элемент списка. Элементы списка должны
быть числовыми выражениями.
Если вы хотите использовать в списке
символьные значения,
применяйте макрокоманду IRPC.
Последователность
IRPCфиктивный параметр, строка
символов
;... тело макрокоманды IRPC
ENDM
осуществляет по одному проходу тела
макрокоманды для каждого
символа. При этом фиктивный параметр
ассемблер каждый раз заменяет
следующим по порядку символом из строки.
На Фиг. 6.7 показаны
примеры применения описанных макрокоманд
повтора.
Microsoft (R) Macro Assembler Version 5.004/2/89 16:06:54
Фиг. 6.7 Макроповторения Page1-1
PAGE,132
TITLEФиг. 6.7 Макроповторения
0000CODESEGMENT
ASSUMECS:CODE,DS:CODE
REPT3; Повторить команду 3 раза
INCAX
ENDM
0000401INCAX
0001401INCAX
0002401INCAX
IRPVALUE,<5,10,15,20>
ADDAX,VALUE
ENDM
000305 00051ADDAX,5
000605 000A1ADDAX,10
000905 000F1ADDAX,15
000C05 00141ADDAX,20
IRPCCHAR, ABCD
ADDAX,CHAR&X
ENDM
000F03 C01ADDAX,AX
001103 C31ADDAX,BX
001303 C11ADDAX,CX
001503 C21ADDAX,DX
0017CODEENDS
END
Фиг. 6.7 Макрокоманды повтора
|