首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

宏的扩充

宏的扩充

MASM 6.11编程系统对宏定义及其相关语句进行了一定程度的扩充。虽然这些扩充给编程带来了一些方便,但它们不一定能被其它的汇编语言编程系统所接受,所以,程序员在使用这些方便的扩充功能时,要注意到可能带来的限制。
下面介绍MASM 6.11编程系统对宏及其相关语句的扩充。
9.6.1宏定义形式
在MASM 6.11编程系统中,其宏定义的一般形式如下:
宏名MACRO [参数1[:Tag]] [,参数2[:Tag]...]
[LOCAL Varlist]

[EXITM [Value]]
ENDM;宏定义体内的局部变量和标号
;宏的定义体
对上述宏定义的说明与9.1.1节中的说明完全一致,其需要增加的说明如下:
Tag——其值可以是REQ、=<缺省值>或VARARG
REQ指定该参数是不可缺少。在宏引用时,若该参数不对应某个“实参”,那么,汇编程序会报错;
=<缺省值>在宏引用时,若不指定该参数所对应的“实参”,那么,该参数就取其缺省值;
VARARG该参数对应一个可变长的实参表,各实参之间用逗号分开;若参数的属性指定为VARARG,那么,该参数一定要是最后一个参数。
有关该属性的应用,请见随后9.6.7节中的举例。
Value——宏功能的返回值,其为可选项。
9.6.2重复伪指令REPEAT
重复伪指令REPEAT与前面9.4.1节中伪指令REPT在功能和使用方式方面完全一致,设置该伪指令的主要原因是保证与先前版本的兼容性。
伪指令REPEAT的使用方式如下:
REPEAT数值表达式
语句序列;被重复的汇编语言语句
ENDM
9.6.3循环伪指令WHILE
循环伪指令WHILE的使用方式如下:
WHILEExp
语句序列;被重复的汇编语言语句
ENDM
其功能是先判断表达式Exp是否为假(或为0),若是,则终止该伪指令的功能,否则,循环汇编下面的指令块。表达式Exp是能在汇编时计算出其值的数值表达式。
例9.16:编写一个带有参数Result和K的宏,其功能是把1+2+…+K的累加和存入Result之中,其中:Result是不可缺省的,K的缺省值为1。
解:
SUMMACROresult:REQ, K:=<1>
LOCALn
N = K
Movresult, 0
WHILEn
Add Result, N
N = N - 1
ENDM
ENDM
有了上面的宏定义,就可书写下面的宏引用来实现其相应的功能:
SUMax, 10;寄存器Ax=1+2+3+…+10
SUMbh;寄存器Bh=1,因为第二个形参取其缺省值
SUMecx, 100;寄存器Ecx=1+2+3+…+100
SUMdata, 20;存储单元Data=1+2+3+…+20
返回列表