5.2. Макросы с несколькими аргументами
У макросов может быть несколько аргументов, разделённых запятыми,
macro movv where, what
{
push what
pop where
}
movv ax, bx
movv ds, es
movv [var1], [var2]
преобразуется в:
push bx
pop ax
push es
pop ds
push [var2]
pop [var1]
Если несколько аргументов имеют одно и тоже имя, то будет использован первый из них:).
Если при использовании макроса указать меньше аргументов, чем при определении, то значения неуказанных будет пустым:
macro pupush a1, a2, a3, a4
{
push a1 a2 a3 a4
pop a4 a3 a2 a1
}
pupush eax, dword [3]
получим:
push eax dword [3]
pop dword [3] eax
Если в аргументе макроса необходимо указать запятую, необходимо аргумент заключить в скобочки из символов < и >.
macro safe_declare name, what
{
if used name
name what
end if}
safe_declare var1, db 5
safe_declare array5, <dd 1,2,3,4,5>
safe_declare string, <db "привет, я просто строка",0>
получим:
if used var1
var1 db 5
end if
if used array5
array5 dd 1,2,3,4,5
end if
if used string
string db "привет, я просто строка",0
end if
Конечно же, можно использовать символы < и > и внутри тела макроса:
macro a arg {db arg}
macro b arg1,arg2 {a <arg1,arg2,3>}
b <1,1>,2
получим:
db 1,1,2,3