除了上面介绍过的MACRO/ENDM宏定义伪操作之外,宏汇编语言还设置了若干与宏相关的伪操作和操作符,这些伪操作和操作符可以增强宏汇编的功能,使得宏定义更加方便、灵活和强大。
1.局部标号伪操作
在宏定义体中,有时会出现需要使用标号的情况,而这些标号在同一程序中多次被调用并展开后,宏定义体中的标号就会重复出现在程序中,引起符号重定义的汇编错误。为了解决这个问题,使得宏定义体中可以使用标号,宏汇编提供了局部标号伪操作LOCAL。其格式为:
LOCAL标号[,标号…]
LOCAL伪操作应当出现在宏定义体的起始部分,紧接着MACRO伪操作,之间不能有分号和注释。在LOCAL伪操作符后面跟着宏定义体中出现的所有标号,在宏展开时这些标号将被汇编程序自动生成的唯一标识符(??0000~??FFFF)替代,以避免宏展开后的符号重定义错误。
一般来说,在宏定义体中出现的标号都要使用LOCAL伪操作将其局部化。
2.取消宏定义伪操作
当不再需要某个宏定义时,可以使用取消宏定义伪操作将其取消。格式如下:
PURGE macro_name[,macro_name…]
PURGE之后的宏指令名macro_name是要被取消的宏定义,这些宏定义一旦被取消,相应的宏指令也就不能再被调用了。
在汇编语言中,宏指令名可以和指令名或伪操作名同名,且具有最高优先级,此时相应的指令或伪操作被屏蔽,直到使用PURGE伪操作取消了相应的宏定义。
3.与宏定义相关的列表伪操作
与宏定义相关的列表伪操作主要有三个:.XALL,.LALL和.SALL。它们用来控制汇编程序输出的列表文件(.LST文件)中宏展开的列出方式。
.XALL:在程序清单中只列出能产生目标代码的宏展开。
.LALL:在程序清单中列出宏展开的全部语句,包括注释。
.SALL:在程序清单中不列出任何宏展开的语句。(www.xing528.com)
默认情况下为.XALL方式。这三个伪操作可以重复出现,后出现的伪操作覆盖前面的伪操作。
4.与宏相关的操作符
与宏相关的操作符主要有三个:注释操作符、合并操作符和表达式操作符。
●注释操作符
注释操作符用于宏定义中,用连续两个半角分号表示。和使用单分号的普通注释不同的是,采用双分号的注释不会出现在列表文件中。
●合并操作符
合并操作符用&表示,用于宏定义之中。它用来在宏定义中将形参与其他字符分开,在宏展开时,汇编程序将用实参替换形参,并去掉&操作符以将实参和其他字符合成一个符号。例如:
这段宏定义对不同的宏调用将生成不同的宏展开结果:
REPMOVSB → REP MOVSB
REPMOVSB Z → REPZ MOVSB
REPMOVSB NZ → REPNZ MOVSB
●表达式操作符
表达式操作符用%表示,使用在宏调用中,其格式为%表达式(或常量),表示将%后面的表达式(或符号常量)的值作为实参进行宏展开。
如果不使用表达式标识符,汇编程序将进行简单的字符串替换,直接以表达式作为实参进行宏展开,而不对表达式的值进行计算。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。