目录 上一页 下一页 附录A

第11章 更高级的技术 -317-

    .
    .  (宏定义体)
    .
    ENDM
  参数可以有多个,都置于"MACRO"伪指令之后,组成参数表。调用宏的时候可以采用下面的方法传递参数:
  宏名  [参数1,参数2,......]
  注意定义了几个参数调用时就要传递几个,不能象一些高级语言调用函数那样可以省略几个,因为宏需要的参数没有默认值。
  灵活的运用带参数的宏可以十分方便地编写程序,这是因为宏的参数不仅可以是指令的操作数,而且还可以是具体的指令,甚至于是某个指令的一部分。比如下面这个例子就是采用指令作为宏的参数:
ope




MACRO
mov
pa2
pa4
ENDM
pa1,pa2,pa3,pa4
ax,pa1
pa3


  如果我们这样调用宏OPE:
  OPE  200H,DEC,AX,CWD
  那么编译之后这个宏将被展开为:
  mov  ax,200h
  dec  ax
  cwd
  参数中的200H与AX是指令操作数,而DEC与CWD却是实实在在的指令。如果我们换用其它指令,比如说这样调用OPE:
  OPE  CX,PUSH,AX,CLC
  这时编译程序就会把OPE宏展开为:
  mov  ax,cx
  push  ax
  clc
  可见这个宏可以称为千变万化了。
  宏OPE的变化还是很普通的,下面这个例子所显示出的变化就更吸引人了:
  compare MACRO pa1,pa2,pa3,pa4
      cmp pa1,pa2
      j&pa3 pa4
      ENDM
  如果这样来调用宏COMPARE:
  COMPARE AX,200H,NZ,EXIT
  则编译之后这个宏会被展开为:
  cmp   ax,200h
  jnz   exit

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 附录A