На этом шаге мы рассмотрим средства, позволяющие повторять некоторый набор команд.
Повторение, заданное определенное число раз. Используется макродиректива 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:
Амперсант (&) в последнем примере используется для того, чтобы задать вычисление параметра блока повторения даже внутри кавычек. Амперсант - это макрооперация, которая работает в блоке повторения, поскольку блоки повторения представляют собой один из типов макрокоманды.
На следующем шаге мы рассматрим макроопределения.