![]() | 第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 |