6.4. Макрокоманды повторения

Для тех случаев, когда нужно несколько раз повторять один и тот же фрагмент программы в макроассемблере имеется несколько специальных макрокоманд. Это операторы 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                1/1/80 04:00:28
Фиг. 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 Макрокоманды повтора