Шаг 54.
Директивы и средства ассемблера. Макроповторения

    На этом шаге мы рассмотрим средства, позволяющие повторять некоторый набор команд.

    Повторение, заданное определенное число раз. Используется макродиректива REPT. Например:

    A EQU  10 
    REPT  100 
      DB А 
    ENDM

    Будет сгенерировано 100 директив DB 10. С этой директивой удобно использовать оператор =, который позволяет изменять значение переменной многократно, т. е. использовать выражение типа А = А + 5.

    Директива IRP.

    IRP параметр, <список> 
    .    .    .    .
    ENDM

    Блок будет вызываться столько раз, сколько параметров в списке. Например:

    IRP REG,<EAX,EBX,ECX,EDX,ESI,EDI>
      PUSH REG
    ENDM

    Приведет к генерации следующих строк:

    PUSH EAX 
    PUSH EBX 
    PUSH ECX 
    PUSH EDX 
    PUSH ESI 
    PUSH EDI

    Директива IRPC. Общий вид:

    IRPC параметр,   строка
      Операторы 
    ENDM

    Пример:

    IRPC CHAR,azklg
      CMP    AL, '&CHAR&'
      JZ    EndC
    ENDM
EndC:

    Данный фрагмент эквивалентен следующей последовательности:

    CMP AL, 'a'
    JZ EndC 
    CMP AL,'z' 
    JZ EndC 
    CMP AL,'k' 
    JZ EndC 
    CMP AL,'l' 
    JZ EndC 
    CMP AL,'g' 
    JZ EndC 
EndC:

    Амперсант (&) в последнем примере используется для того, чтобы задать вычисление параметра блока повторения даже внутри кавычек. Амперсант - это макрооперация, которая работает в блоке повторения, поскольку блоки повторения представляют собой один из типов макрокоманды.

    На следующем шаге мы рассматрим макроопределения.




Предыдущий шаг Содержание Следующий шаг