例7.8
宏定义:
DIF MACRO A,B
DB B-A
ENDM
DIF1 MACRO A:REQ,B:REQ
DB B-A
ENDM3
DIF2 MACRO A:REQ,B
DB B-A
ENDM
这三个宏定义的功能是相同的,它们的差别是DIF对其变元A和B 并未提出特殊的要求。DIF1要求A、B在调用时必须指定实元,否则汇编程序将指示出错。DIF2要求在调用时A必须指定实元,如未指定,则汇编程序将指示出错。对B则无特殊要求。
宏调用与宏展开:
DIF 5,8
1 DB 8-5
DIF 5
1 DB -5
DIF ,8
1 DB 8- 汇编指示错:表达式无效
DIF1 5,8
1 DB 8-5
DIF1 5
1 DB -5 汇编指示错:缺宏变元
DIF1 ,8
1 DB 8- 汇编指示错:缺宏变元,表达式无效。
DIF2 5,8
1 DB 8-5
DIF2 5
1 DB -5
DIF2 ,8
1 DB 8- 汇编指示错:缺宏变元,表达式无效。
例7.9
宏定义:
DIF3 MACRO A:=<10>,B:=<12>
DB B-A
ENDM
宏调用和宏展开:
DIF3
1 DB 12-10
DIF3 5,8
1 DB 8-5
DIF3 5
1 DB 12-5
DIF3 ,8
1 DB 8-10
可见,在宏调用中如未指定实元,则宏展开时使用宏定义中指定的缺省值;如宏调用时指定了实元,则按所指定的实元展开。