宏汇编与子程序:高效编程的利器

宏汇编与子程序:高效编程的利器

1.宏汇编

在汇编语言程序设计过程中,将具有一定功能,需要多次重复使用,且比较短的程序段定义为一条宏汇编

使用宏汇编语句,可以减少程序书写错误,缩短源程序长度长度。

宏:

源程序中一段有独立功能的程序代码

宏指令:

用户自定义的指令,在编程中,将多次使用的功能用一条宏指令来代替

1.宏定义

宏定义语句MACRO和子程序定义语句PROC一样都是伪指令。宏定义需要一对伪指令MACRO和ENDM完成。

格式:

宏名 MACRO [哑元1,哑元2,…]

语句串

ENDM

说明:语句串代表宏定义体。宏定义并不产生目标代码,只是用来说明“宏名字”与宏定义体之间的联系。其中哑元1,哑元2,… 是虚拟参数或称形式参数,用逗号分隔。虚参(形参)可不设置。

2.宏调运

宏定义之后,要在程序中使用宏时,只要写出宏名字即可。使用宏的过程称为宏调用。如宏定义中有形参,那么宏调用时在宏名字后要加上实参。实参的个数应该与形参一样, 多余的参不予考虑。

3.宏展开

源程序在汇编时,宏指令被汇编程序用相应的程序代码所取代,这段程序即是宏定义时语句串。这个过程称为宏展开。宏展开不需要程序员负责或干预,是由汇编程序自动完成的。如果宏定义时有哑元(形参),在宏调用时就要写出实元(实参),在宏展开时汇编程序将哑元替换为实元。哑元和实元统称为变元。

2.子程序和宏定义

简述子程序和宏定义之间的区别:

使用子程序,需要为转子及返回、保存及恢复寄存器以及参数的传递等增加程序的额外开销;子程序是在程序执行期间由主程序调用的,它只占它自身大小的一个空间;而宏调用则是在汇编期间展开的,没调用一次就把宏定义体展开一次,因而它占用的空间与调用次数有关,次数越多,占用的空间越多。

2.重复汇编和条件汇编

2.1重复汇编

在程序编写中,如果遇到一段几条指令都一样的程序或连续的数据单元定义,可以不必写出有指令和定义,而用重复汇编来完成。重复汇编包含的内容是在汇编期间展开的,可与宏配合使用。

1.重复次数确定

REPT 重复次数

重复体

ENDM

2.重复次数不确定

格式1:

IRP 哑元,<实元1,实元2, ..> ;用实元替代哑元,重复次数由实元的个数决定。

重复体

ENDM

或者

格式2: IRPC 哑元 字符串 ;用字符串替代哑元,重复次数由字符个数决定。

2.2条件汇编

在源程序汇编时,如果加入了条件汇编伪指令,可以决定是否对某段程序进行汇编。这样就可以控制程序具有不同功能以及最后生成的代码。条件汇编可用于宏定义中,也可在程序使用。

IF 表达式

代码段1

ELSE

代码段2

ENDIF

1.宏标号

在宏定义体中,如果有分支或循环等带有标号的指令时,必须用LOCAL指定局部标号伪指令对标号进行处理。否则每调用一次宏,都要展开相同的代码,就会出现标号重复的现象,这是不允许的。

格式: LOCAL标号1 [,标号…]

将给出的标号在多次宏调用时以不同的数字取代标号,避免标号的重复定义。

说明: LOCAL 伪指令只能在宏定义体中使用,并且是宏定义体的第1 条语句。

📚 相关推荐

推荐七款靠谱的Download工具 多平台
谙的意思,谙的解释,谙的拼音,谙的部首,谙的笔顺
[烽火]烽火 光猫 彻底 恢复出厂设置
5换5s外壳
[攻略]【暗黑3】34赛季国家队辅助蛮子详解
科普帖!黑洞是如何“长”大的?