Макроповторения
Макроповторения
1. Повторение, заданное опеделенное число раз. Используется макродиректива REPT. Например:
A EQU 10 REPT 100 DB A ENDM
Будет сгенерировано 100 директив DB 10. С этой директивой удобно использовать оператор "=", который позволяет изменять значение переменной многократно, т.е. использовать выражение типа А = А + 5.
2. Директива 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
3. Директива 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:
Амперсант (&) в последнем примере используется для того, чтобы задать вычисление параметра блока повторения даже внутри кавычек. Амперсант - это макрооперация, которая работает в блоке повторения, поскольку блоки повторения представляют собой один из типов макрокоманды.