【本章小结】

 
宏是源程序中一段有独立功能的程序代码。它只需要在源程序中定义一次,就可以多次调用它。调用时只需要用一个宏指令语句。
 
  宏展开时用宏定义体取代源程序中的宏指令名,而且用实元取代宏定义中的哑元。在取代时,实元和哑元一一对应。实元的个数应该和哑元的个数相等,但汇编程序并不要求它们必须相等(在MASM6中,可以用 :REQ指定某个变元必须有)。宏展开后所得到的语句应该是有效的,否则汇编程序将会指示出错。

  由于宏指令可以带哑元,调用时可以用实元取代,使宏汇编的使用增加了灵活性。实元可以是常数、寄存器、存储单元名以及用寻址方式能找到的地址或表达式等。还可以是指令的操作码或操作码的一部分。甚至可以为空。

  宏调用是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间也就越大。用宏汇编可以免去执行时间上的额外开销,但如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素。一般说来,那些较短的且变元较多的功能段,使用宏汇编更为合理。

  宏定义必须先定义后调用。允许嵌套、递归。

  &操作符在宏定义体中可以作为哑元的前缀,展开时把&前后两个符号合并而形成一个符号,这个符号可以是操作码、操作数或是一个字符串。

  %操作符把跟在它之后的表达式的值转换成当前基数下的数,在宏展开期间,用这个数来取代哑元。

  MASM6中可以用 := 操作符为宏变元提供缺省的参数值。
 
  LOCAL伪操作可以解决宏展开后出现的标号多重定义问题。

  MASM6用.LISTMACROALL、.LISTMACRO和 .NOLISTMACRO来控制汇编清单中宏展开的列出情况。

  通过建立宏库,可以方便有效地提高开发效率。

  PURGE伪操作用来删除不用的宏定义。
 
  连续地重复完成相同的或者几乎完全相同的一组代码,可使用重复汇编或不定重复汇编。

  汇编程序能根据条件伪操作中的条件把一段源程序包括在汇编语言程序内或者把它排除在外。

  在MASM6.0中引入了几种高级语言结构。其目的是为了减轻汇编语言程序员的编程负担,同时也增加了程序的可读性。