; NEG OPER
NEXT:
ENDM
如果
程序中多次调用该宏定义时,展开后会出现标号的多重定义.为此系统提供了LOCAL伪操作,其格式是
LOCAL list of local labels
其中局部标号表内的各标号之间用逗号隔开.汇编
程序对LOCAL伪操作的局部标号表中的每一个局部标号建立唯一的符号(用??0000~??FFFF)以代替在展开中存在的每个局部标号.必须注意,LOCAL伪操作只能用在宏定义体内,而且它必须是MACRO伪操作后的第一个语句,在MACRO和LOCAL伪操作之间还不允许有注释和分号标志.
本例中的ABSOL宏定义在考虑有多次调用可能性的情况下,应定义为:
ABSOL MACRO OPER
LOCAL NEXT
CMP OPER,0
JGE NEXT
NEG OPER
NEXT:
ENDM
宏调用:
ABSOL VAR
ABSOL BX
宏展开:
+ CMP VAR,0
+ JGE ??0000
+ NEG VAR
+??0000:
+ CMP BX,0
+ JGE ??0001
+ NEG BX
+??0001:
8.宏定义中允许使用宏调用,其限制条件是:必须先定义后调用
宏定义:
DIF MACRO X,Y
MOV AX,X
SUB AX,Y
ENDM
DIFSQR MACRO