第8章 汇编语言高级编程技术
1
宏指令
宏指令库
重复伪指令
条件伪指令
2
宏指令
在高级汇编语言技术中,一段共用语句序列除了可以设计成子程序外,还可以设计成宏指令的形式。
宏与子程序类似,首先在源程序中定义一个宏,后面在需要时就可以调用它,并允许传递多个参数。
正确灵活使用宏,可以缩短源程序的长度,扩充指令的功能,使源程序更清晰、简洁,有利于阅读、修改与调试,从而提高编程效率。
3
一、宏定义、宏调用、宏扩展
宏指令是源程序中一段有独立功能的程序代码,由用户使用宏定义伪指令定义。
宏定义伪指令伪指令格式:
宏指令名 MACRO [形式参数表]
…;宏指令体
ENDM
宏指令名由用户自起,注意ENDM前没有宏指令名。形式参数表给出了宏定义中所用到的形式参数,形式参数之间用逗号隔开。宏指令体可以由伪指令、指令、甚至于宏指令组成。
4
宏指令一经定义,就可以在程序中调用它,这被称为宏调用。
宏调用格式:宏指令名[实参数表]
实参数表给出了宏调用中要用到的实参数,实参数之间用逗号隔开,实参数应和形式参数的顺序、类型一致。
5
当源程序被汇编时,汇编程序对每个宏调用进行宏扩展。宏扩展:
宏定义体替换宏指令名
实参数替换形式参数
原则上,实参数个数应和形式参数个数相等,但汇编程序允许它们不等
若实参数个数大于形式参数个数,在替换时多余的实参数不予考虑
若实参数个数小于形式参数个数,则多余的形式参数作为空(字符)或零(数字)处理
应保证用实参数替换形式参数后,所展开的是有效的汇编语句,否则汇编程序会提示错误。
6
、宏调用、宏扩展
;宏定义
INCHAR MACRO
MOV AH,1
INT 21H ;输入的字符在AL
ENDM
;宏调用
INCHAR
;宏调用
当汇编程序汇编到宏指令INCHAR时对其扩展为:
1 MOV AH,1
1 INT 21H
7
由于宏调用是在宏扩展时替换,一条宏指令在程序中被调用几次,经汇编后其源代码就会在程序中出现几次,而不是像子程序调用那样把控制转移到子程序、执行完后再返回。因此使用宏指令仅仅是减轻了程序设计人员的劳动量,并不能缩短目标码的长度。
8
二、设计宏指令时应注意的问题
宏指令也像子程序那样可以被多次调用或被多个程序共享,设计时需注意:
在宏指令开头说明功能、调用参数和返回参数。在设计宏指令库时尤其要注意。
在宏指令开头及结束处保存和恢复将要用到的寄存器内容,使用PUSH保存、POP恢复。
若宏指令中包含标号或变量名则一定要用LOCAL伪指令说明,否则当一个程序多次调用该宏指令时会出现符号重复定义错误。
9
三、LOCAL伪指令
格式:LOCAL 局部符号表
功能:对局部符号表中的每个符号,在汇编时每扩展一次便建立一个惟一的符号,形如??xxxx。以保证汇编时生成名字的惟一性。
说明:xxxx的值在0000~FFFF之间。
注意:LOCAL伪指令一定要是宏体中的第一个语句,即它应紧跟在宏定义的MACRO之后,中间不能插有任何其它语句(含注释语句)。
10
第八章-汇编语言高级编程技术 来自淘豆网m.daumloan.com转载请标明出处.