赞
踩
1.宏定义
宏定义语句MACRO和子程序定义语句PROC一样都是伪指令。宏定义需要一对伪指令MACRO和ENDM完成。
格式:
宏名 MACRO [哑元1,哑元2,...]
语句串
ENDM
说明:语句串代表宏定义体。宏定义并不产生目标代码,只是用来说明“宏名字”与宏定义体之间的联系。其中哑元1,哑元2,… 是虚拟参数或称形式参数,用逗号分隔。虚参(形参)可不设置。
2.宏调运
宏定义之后,要在程序中使用宏时,只要写出宏名字即可。使用宏的过程称为宏调用。如宏定义中有形参,那么宏调用时在宏名字后要加上实参。实参的个数应该与形参一样, 多余的参不予考虑。
3.宏展开
源程序在汇编时,宏指令被汇编程序用相应的程序代码所取代,这段程序即是宏定义时语句串。这个过程称为宏展开。宏展开不需要程序员负责或干预,是由汇编程序自动完成的。如果宏定义时有哑元(形参),在宏调用时就要写出实元(实参),在宏展开时汇编程序将哑元替换为实元。哑元和实元统称为变元。
4.宏与子程序
宏与子程序都是编写结构化程序的重要手段,两者各有特色。相同之处,宏和子程序都可以定义为一段功能程序,可以被其他程序调用。不同之处如下:
通常当程序较短、传递参数较多或要快速执行时,采用宏比较合适;当程序较长或对内存空间有要求时,选用子程序比较好。
1.变元是操作数
2.变元是操作码
定义栈操作宏指令STACKM。
3.变元是操作码的一部分
变元出现在操作码中,要用&作为分隔符。
例:定义移位宏指令SHIFT
4.变元是存储单元
在数据段中用伪指令定义存储单元时,也可以使用宏,使单元内容的设置更灵活。
例:定义存储单元宏指令DATAS。
5.变元是字符串
例:定义字符串宏指令MASG。
1.&替换运算符
用于将字串与哑元连接。宏调用时,字串与相应的实元内容连在一起。
例:定义字符串宏指令DISTR
2.< >传递运算符
在变元为字符串时,如果实元是含有空格的字符串,则实元要用< >传递运算符括起来。
3. ! 转义运算符
当字符串中含有<或>字符时,为避免与传递运算符冲突,在宏调用的实元中用!表示该字符为普通字符。
4.% 表达式运算符
在宏调用的实元中如果有表达式, %运算符将表达式的值作为实元。
5. ;; 宏注释符
双分号“;;”是在宏定义中使用的注释符。其后的注释在宏调用及宏展开时不出现。
1.宏标号
在宏定义体中,如果有分支或循环等带有标号的指令时,必须用LOCAL指定局部标号伪指令对标号进行处理。否则每调用一次宏,都要展开相同的代码,就会出现标号重复的现象,这是不允许的。
格式: LOCAL标号1 [,标号...]
将给出的标号在多次宏调用时以不同的数字取代标号,避免标号的重复定义。
说明: LOCAL 伪指令只能在宏定义体中使用,并且是宏定义体的第- - 条语句。
例:定义分支宏指 令BRANCH。
2.宏删除
当不需要某个宏时,可以将其删除。
格式: PURGE 宏名 [,宏名..]
功能:在汇编时将该语句中的宏定义删除。
3.宏嵌套
在宏定义中可以使用宏调用,称为宏嵌套。宏嵌套能增加宏的功能,简化宏的操作。(类似于C语言中的函数调用函数)
如果在程序中定义了多个宏,可以把这些宏一起或分类放在独立的文件中保存。这种文件与高级语言中的库文件类似,称为宏库。在需要这些宏的程序中用INCLUDE伪指令把宏库调出就可以使用这些宏了。
1.建立宏库
把多个宏的宏定义放在一个文本文件中,为其起名并加上扩展名. MAC。
2.调用宏库
在应用程序中使用宏指令之前,用INCLUDE伪指令将宏库调入。
要想查看宏展开的结果,可在汇编时 . LST列表文件。
1.结构定义
结构名 STRUC
结构体
结构名 ENDS
2.结构预置
结构定义之后还不能使用,要对结构预置后才能把相关信息真正存人存储器。
结构变量名 结构名 < 字段值表>
结构变量名可任意起名,用于在程序中直接引用。结构名是结构定义时的名<字段值表>用于给结构变量赋初值。
3.结构引用
结构在定义和预置之后,在程序中可以使用。在引用时,直接写结构变量名。
格式 : 结构变量名.结构字段名
“.”表示对字段的访问。在使用时,可以预先将结构变量的起始地址、偏移量送至某个寄存器,再用寄存器间址代替结构变量名。
在程序编写中,如果遇到一段几条指令都一样的程序或连续的数据单元定义,可以不必写出有指令和定义,而用重复汇编来完成。重复汇编包含的内容是在汇编期间展开的,可与宏配合使用。
1.重复次数确定
REPT 重复次数 n
重复体
ENDM
在数据段中定义了10个单元,存放30H ~ 39H。
2.重复次数不确定
格式1:
IRP 哑元,<实元1,实元2, ..>
重复体
ENDM
用实元替代哑元,重复次数由实元的个数决定。
格式2: IRPC 哑元, 字符串
用字符串替代哑元,重复次数由字符个数决定。
汇编时,在代码段中连续插入了7条PUSH指令,分别是“PUSH AX”~“ PUSH BP"。
3.条件汇编
在源程序汇编时,如果加入了条件汇编伪指令,可以决定是否对某段程序进行汇编。这样就可以控制程序具有不同功能以及最后生成的代码。条件汇编可用于宏定义中,也可在程序使用。
IF 表达式
代码段1
ELSE
代码段2
ENDIF
条件汇编还有其他格式,如表8-1所示。使用方式与IF类似,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。