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