1.宏操作符"<>"
在宏调用时, 当实在参数包含空格或逗号等间隔符号时,必须使用"<"和">"作为参数的定界符。例如:
Data marco TheData;宏定义
db TheData
endm;
调用:Data 5,4,3;展开为 db 5
Data <5,4,3>;展开为 db 5,4,3
2.宏操作符"&"
在宏定义时,当形式参数作为标识符或字符串的一部分时,必须使用&作为分隔符
DebugMsg macro Point,String
local SkiData
push ds
push cs
pop ds
lea dx,Msg&Point&
mov ah,9
int 21h
pop ds
jmp ds
Msg&Point& db 'At point &Point&:&String&',0dh,0ah,'$'
SkipData:
endm
调用:DebugMsg 2,<Invalid operand>
输出信息:“At point 2:Invalid operand”
被展开发:Msg2 db 'At point 2:Invalid operand',0dh,0ah,'$'
3.宏操作符 ’ %‘
当宏调用时,若在实在参数中使用"%",则MASM将"%"后常数表达式的值作为参数,而非表达式本身。
GetData marco Param
mov ax,Array [Param*2]
endm
调用:GetData 100+5;展开为mov ax,Array[100+5*2]
调用 :GetData %100+5;展开为mov ax,Array[105*2]
4.宏操作符"!"
对于包含在"<"和">"这间的文本串,MASM将出现在"!"之后的特殊字符(<,>,%,",',,)作为普通字符处理。若将"!"作为普通字符,则使用"!!"."!"不适用于 包含在引号中的字符串。
DefString macro String
db "&String&$"
宏调用: DefString <Input a Integer(!>0):>
宏展开: db "Input a Integer (>0):$"
再如:
<20!%!>10!%>;被 汇编为文本串20%>10%
5.宏注释符";;"
在宏定义中,以";;"开始的宏注释,在宏展开时被忽吃略。