Assembler для начинающих


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



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


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




Содержание раздела