宏的扩展——REPEAT/WHILE

本文介绍了MASM 6.11编程系统对宏定义的扩充,特别是重复伪指令REPEAT和循环伪指令WHILE的用法。这两个指令在汇编语言编程中用于实现重复和条件循环操作,但可能不被所有汇编器支持。文中还提供了一个计算1到k累加和的宏定义示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MASM6.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。

解:

SUMMACRO result:REQ, k:=<1>
LOCAL n
n = k
movresult, 0
WHILEn
add    result, n
n = n - 1
ENDM
ENDM

有了上面的宏定义,就可书写下面的宏引用来实现其相应的功能:



http://zx.zynews.com/hyzx/yskt/5399598682.html
http://zx.zynews.com/hyzx/yskt/5398161349.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807428.html
http://www.zznews.cn/hyzx/jkxx/5394212839.html
http://zx.zynews.com/hyzx/yskt/5398111150.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807397.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807393.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807380.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807590.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/564155.html

http://www.zznews.cn/hyzx/jkxx/5406327705.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/804574.html
http://zx.zynews.com/hyzx/yskt/5390123823.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563788.html
http://zx.zynews.com/hyzx/yskt/5398098762.html
http://www.zznews.cn/hyzx/jkxx/5394137056.html
http://www.yltvb.com/xwbk/redianxinwen/5389545718.html
http://zx.zynews.com/hyzx/yskt/5398102537.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563789.html
http://www.zznews.cn/hyzx/jkxx/5394172683.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807380.html
http://zx.zynews.com/hyzx/yskt/5398105715.html
http://www.zznews.cn/hyzx/jkxx/5394208967.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807393.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563790.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807397.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563791.html
http://zx.zynews.com/hyzx/yskt/5398108045.html
http://zx.zynews.com/hyzx/yskt/5398111150.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563792.html
http://www.zznews.cn/hyzx/jkxx/5394212839.html
http://zx.zynews.com/hyzx/yskt/5398113539.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563793.html
http://www.zznews.cn/hyzx/jkxx/5394215834.html
http://zx.zynews.com/hyzx/yskt/5398117977.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/807428.html
http://zx.zynews.com/hyzx/yskt/5398161349.html


 SUMax, 10;寄存器ax=1+2+3+…+10
SUMbh;寄存器bh=1,因为第二个形参取其缺省值
SUMecx, 100;寄存器ecx=1+2+3+…+100
SUMdata, 20;存储单元data=1+2+3+…+20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值