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 条语句。