经典汇编语言教程:第9章 宏,宏的定义

第9章 宏,宏的定义

宏是程序设计的另一个基本概念,它是把一段程序代码用一个特定标识符(即:宏名)来表示。这样,在编写源程序时,程序员就可以直接使用该标识符来代替一段代码的编写,从而减少了重复代码的编写工作,也为减少错误,提高程序的可维护性提供了帮助。宏在高级语言(如:C/C++等)也有广泛的使用。

9.1 宏的定义和引用

通常情况下,宏是用来代表一个具有特定功能的程序段,它只需在源程序中定义一次,但可在源程序中引用多次。只要在编写程序时需要,就可以直接使用它。

9.1.1 宏的定义

在使用宏之前必须先定义宏,定义宏一般格式如下:

宏名MACRO [形参1, 形参2, ……]
;宏的定义体
ENDM

在书写宏定义时,必须遵照下列规定:

★、MACRO和ENDM是二个必须成对出现的关键字,它们分别表示宏定义的开始和结束;

★、MACRO和ENDM之间的部分是宏的定义体,它是由指令、伪指令或引用其它宏所组成的程序片段,是宏所包含的具体内容;

★、“宏名”是由程序员指定的一个合法的标识符,它代表该宏;
★、宏名可以与指令助忆符、伪指令名相同。在这种情况下,宏指令优先,而同名的指令或伪指令都失效;
★、在ENDM的前面不要再写一次宏名,这与段或子程序定义的结束方式有所不同;
★、在宏定义的首部可以列举若干个形式参数,每个参数之间要用逗号分隔。

根据上述规定,我们提倡宏名尽可能不要与指令助忆符、伪指令相名,以免引起不必要的误会。

例9.1 定义一个把16位数据寄存器压栈的宏。

PUSHRMACRO
PUSHAX
PUSHBX
PUSHCX
PUSHDX
ENDM

例9.2定义二个字存储变量相加的宏。

MADDMMACRO OPRD1, OPRD2
MOVAX, OPRD2
ADDOPRD1, AX
ENDM

上述宏定义虽然能满足题目的要求,但由于在定义体中改变了寄存器AX的值,这就使宏的引用产生了一定的副作用。为了使寄存器AX的使用变得透明,可把该宏定义改成如下形式:

MADDMMACRO OPRD1, OPRD2
PUSHAX
MOVAX, OPRD2
ADDOPRD1, AX
POPAX
ENDM

通过在宏定义的开始和结尾分别增加对所用寄存器的保护和恢复指令,就使得:对该宏的任意引用都不会产生任何副作用。

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号