汇编程序在所展开的指令前加上1表示这些指令是由宏展开而得到的。
 
  从上面的例子可以看出宏调用的优点:
  由于宏指令可以带哑元,调用时可以用实元取代,这就避免了子程序因参数传送带来的麻烦,使宏汇编的使用更加灵活。实元可以是常数、寄存器、存储单元名以及用寻址方式能找到的地址或表达式等。从以后的例子中可看到,实元还可以是指令的操作码或操作码的一部分等,宏汇编的这一特性是子程序所不及的。

  但是,宏调用的工作方式和子程序调用的工作方式是完全不同的,图7.1说明了两者的区别。
  子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间;而宏调用则是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间也就越大。前面已经提到,用宏汇编可以免去执行时间上的额外开销,但如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素。因此,可以根据具体情况来选择使用方案。一般说来,由于宏汇编可能占用较大的空间,所以代码较长的功能段往往使用子程序而不用宏汇编;而那些较短的且变元较多的功能段,则使用宏汇编就更为合理了。

  应该注意的是:在程序中,宏定义必须出现在宏调用之前,也就是说必须先定义后调用。
  往往把宏定义放在程序中所有段的代码之前,即在程序一开始先列出程序中所用的所有宏定义,以便在程序中调用。