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