ZHCU947E June 2015 – January 2023
如果您希望多次调用一个宏,但每次使用不同的数据,则可以在该宏中指定参数。宏语言支持一种特殊的符号,被称为替代符号,用于宏参数。
宏参数是表示字符串的替代符号。这些符号也可以在宏以外使用,使字符串等于符号名称(请参阅GUID-F4477534-D21E-46DE-A9DC-ABA796324218.html#GUID-F4477534-D21E-46DE-A9DC-ABA796324218)。
有效的替代符号最长可以包含 128 个字符,并且必须以字母开头。该符号的其余字符可以是字母数字字符、下划线和美元符号的组合。
用作宏参数的替代符号是定义宏中的局部替代符号。您可以为每个宏定义最多 32 个局部宏替代符号(包括使用 .var 指令定义的替代符号)。有关 .var 指令的更多信息,请参阅GUID-954A7F2F-6025-48D8-B8A5-369A65F41B91.html#GUID-954A7F2F-6025-48D8-B8A5-369A65F41B91。
在宏扩展期间,汇编器会通过变量将实参传递给宏参数。每个实参的字符串等效值会被分配给对应的参数。没有对应实参的参数会被设置为空字符串。如果实参数量超过参数数量,则会将剩余所有实参的字符串等效值分配给最后一个参数。
如果要将一个实参列表分配一个参数,或者如果要将逗号或分号分配给一个参数,则必须在两边加上引号。
在汇编时,汇编器会将宏参数/替代符号替换为相应的字符串,然后将源代码转换为对象代码。
以下示例展示了具有不同数量实参的宏的扩展。
宏定义:
Parms.macro a,b,c
; a = :a:
; b = :b:
; c = :c:
.endm
调用宏:
Parms 100,label Parms 100,label,x,y
; a = 100 ; a = 100
; b = label ; b = label
; c = "" ; c = x,y
Parms 100, , x Parms "100,200,300",x,y
; a = 100 ; a = 100,200,300
; b = "" ; b = x
; c = x ; c = y
Parms """string""",x,y
; a = "string"
; b = x
; c = y