首页 理论教育 微型计算机原理中的宏的定义、调用与展开

微型计算机原理中的宏的定义、调用与展开

时间:2023-11-03 理论教育 版权反馈
【摘要】:使用宏指令的三个步骤:宏的定义、调用和展开。MOVSTR 64,STR,BUFFER3.宏展开当汇编程序扫描到源程序中的宏定义时,汇编程序把宏定义的相关信息填入到宏定义表中,这些信息将在扫描到宏调用时被用于宏的展开。宏的展开实际上就是一个替代的过程,用宏定义体替代该宏指令,并用实参按位置对应关系一一替代形参。语法的正确性检查则由汇编程序在宏展开后进行。

微型计算机原理中的宏的定义、调用与展开

使用宏指令的三个步骤:宏的定义、调用和展开。宏定义即将一段程序代码定义为宏指令。经过定义后的宏指令可以被插入到程序需要的地方,用法和其他汇编语言指令相同,这个过程就是宏调用。而在程序被汇编的时候,在宏调用的位置用宏定义的指令代码代替宏指令,最终生成处理器能够执行的代码的过程就是宏的展开。

1.宏定义

宏指令的定义是由汇编伪指令MACRO和ENDM来实现的,宏指令的定义格式为:

这里,macro_name即宏指令名,是为该宏定义所起的名称,相当于宏指令的“操作符”,宏指令名应当以字母开头。在MACRO伪操作符后面紧跟着宏定义的形式参数(又称哑元),形参可有可无,当有超过一个形参时,各形参之间以半角逗号隔开。在MACRO伪操作和ENDM伪操作之间是宏定义体,即一段具有独立功能的指令序列,宏定义伪操作将这段指令序列定义为给定的宏指令名macro_name。例如:

这个宏定义以一条REP MOVSB指令为核心实现了将长度为LEN的字符串从SRC复制到DST的功能,其中LEN、SRC和DST为形式参数,在调用宏的时候需要使用实际参数进行替代。

2.宏调用

对于定义好的宏指令,在程序中可以直接通过引用宏指令的方式来调用它,称为宏调用。宏在被调用前必须先被定义。宏调用的格式为:

macro_name[实参1,实参2,…]

这里,macro_name为被定义的宏指令名,根据宏指令定义时定义的形式参数的个数的不同,在宏指令名的后面带对应的实际参数(又称实元)。如果在定义时没有定义形式参数,则宏指令的调用也不能带实际参数。实际参数和形式参数之间通过位置一一对应,多个实参之间也使用半角逗号分隔。

例如,下面代码就是使用上面定义的MOVSTR宏指令实现将一个64个字符的字符串从STR复制到BUFFER的功能。(www.xing528.com)

MOVSTR 64,STR,BUFFER

3.宏展开

当汇编程序扫描到源程序中的宏定义时,汇编程序把宏定义的相关信息填入到宏定义表中,这些信息将在扫描到宏调用时被用于宏的展开。宏的展开实际上就是一个替代的过程,用宏定义体替代该宏指令,并用实参按位置对应关系一一替代形参。例如上面对MOVSTR的宏调用将被展开为:

LDS SI,STR

LES DI,BUFFER

MOV CX,64

CLD

REP MOVSB

在一般情况下,实参和形参的个数相等,这时实参将按照位置对应关系一一替代形参。当实参的个数少于形参时,多余的形参将被“空”替代;当实参的个数多于形参,多余的实参将被忽略。需要注意的是,宏的展开只是简单的字符串替代,并不检查语法的正确性。语法的正确性检查则由汇编程序在宏展开后进行。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈