如果有一段程序需要多次使用,为使程序不重复书写这段程序,可用宏定义把所需要重复出现的程序块定义成宏指令,此后在宏指令出现的地方,宏汇编程序总是自动地把它们替换成相应的代码段。
**宏指令格式**
[ 宏指令名 ] MACRO [形式参数,.........]
代码段
ENDM
在宏定义中,使用了“形式参数“,它们引用宏指令时被给出的一些名字或数值(实在参数)所替换。使用形式参数给宏指令带来了很大的灵活性。
(2)宏调用格式
[ 宏指令名 ] [实在参数, …]
比如:
delay macro mov r2,#200 djnz r2,$ endm
flash: setb p1.0 delay clr p1.0 delay sjmp flash
与子程序不同的是,子程序调用要用LCALL,子程序返回要用RET,而宏只是一段程序,子程序中用到时,编译程序自动将这段程序在该位置展开,所以宏调用其实相对与子程序而言占用的内存空间要大。