- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章-汇编语言高级编程技术
第8章???汇编语言高级编程技术 7.1 宏 指 令 7.2 宏指令库 7.3 重复伪指令 7.4 条件伪指令 7.1 宏 指 令 在高级汇编语言技术中,一段共用语句序列除了可以设计成子程序外,还可以设计成宏指令的形式。 宏与子程序类似,首先在源程序中定义一个宏,后面在需要时就可以调用它,并允许传递多个参数。 正确灵活使用宏,可以缩短源程序的长度,扩充指令的功能,使源程序更清晰、简洁,有利于阅读、修改与调试,从而提高编程效率。 一、宏定义、宏调用、宏扩展 宏指令是源程序中一段有独立功能的程序代码,由用户使用宏定义伪指令定义。 1.宏定义 宏定义伪指令伪指令格式: 宏指令名 MACRO [形式参数表] … ;宏指令体 ENDM 宏指令名由用户自起,注意ENDM前没有宏指令名。形式参数表给出了宏定义中所用到的形式参数,形式参数之间用逗号隔开。宏指令体可以由伪指令、指令、甚至于宏指令组成。 2.宏调用 宏指令一经定义,就可以在程序中调用它,这被称为宏调用。 宏调用格式:宏指令名 [实参数表] 实参数表给出了宏调用中要用到的实参数,实参数之间用逗号隔开,实参数应和形式参数的顺序、类型一致。 3.宏扩展 当源程序被汇编时,汇编程序对每个宏调用进行宏扩展。宏扩展: 宏定义体替换宏指令名 实参数替换形式参数 原则上,实参数个数应和形式参数个数相等,但汇编程序允许它们不等 若实参数个数大于形式参数个数,在替换时多余的实参数不予考虑 若实参数个数小于形式参数个数,则多余的形式参数作为空(字符)或零(数字)处理 应保证用实参数替换形式参数后,所展开的是有效的汇编语句,否则汇编程序会提示错误。 例1.输入一个字符的宏定义、宏调用、宏扩展 ;宏定义 INCHAR MACRO MOV AH,1 INT 21H ;输入的字符在AL ENDM ;宏调用 INCHAR ;宏调用 当汇编程序汇编到宏指令INCHAR时对其扩展为: 1 MOV AH,1 1 INT 21H 由于宏调用是在宏扩展时替换,一条宏指令在程序中被调用几次,经汇编后其源代码就会在程序中出现几次,而不是像子程序调用那样把控制转移到子程序、执行完后再返回。因此使用宏指令仅仅是减轻了程序设计人员的劳动量,并不能缩短目标码的长度。 二、设计宏指令时应注意的问题 宏指令也像子程序那样可以被多次调用或被多个程序共享,设计时需注意: 1.宏指令说明 在宏指令开头说明功能、调用参数和返回参数。在设计宏指令库时尤其要注意。 2.寄存器保存与恢复 在宏指令开头及结束处保存和恢复将要用到的寄存器内容,使用PUSH保存、POP恢复。 3.说明局部符号 若宏指令中包含标号或变量名则一定要用LOCAL伪指令说明,否则当一个程序多次调用该宏指令时会出现符号重复定义错误。 三、LOCAL伪指令 格式:LOCAL 局部符号表 功能:对局部符号表中的每个符号,在汇编时每扩展一次便建立一个惟一的符号,形如??xxxx。以保证汇编时生成名字的惟一性。 说明:xxxx的值在0000~FFFF之间。 注意:LOCAL伪指令一定要是宏体中的第一个语句,即它应紧跟在宏定义的MACRO之后,中间不能插有任何其它语句(含注释语句)。 例2.定义一个延时10ms宏指令delay,并且在程序中调用实现延时20ms功能。 ;宏定义 DELAY MACRO LOCAL LOP MOV CX,2801 LOP: LOOP LOP ENDM ;宏调用: DELAY DELAY ;宏扩展: DELAY 0009 B9 0AF1 1 MOV CX,2801 000C E2 FE 1 ??0000: LOOP ??0000 DELAY 000E B9 0AF1 1 MOV CX,2801 0011 E2 FE 1 ??0001: LOOP ??0001 四、宏指令中参数的使用 形式参数使宏更通用更灵活,而在宏调用时给出实参数即可。 宏指令的实参数可以是常数、寄存器、变量、表达式、操作码或操作码的一部分、指令或伪指令助记符等,如此多的参数种类以及参数传递的方便性是子程序所不能比拟的。 宏指令允许嵌套。 例3.定义在两个字型内存变量之间传送数据的宏指令,并调用之。 MOVE MACRO X,Y ;X→Y PUSH AX MOV AX,X MOV Y,AX POP AX ENDM DATA SEGMENT VAR1 DW 6543H VAR2 DW ? DATA ENDS MOVE VAR1,VAR2 ;宏调用 ;宏扩展 1 PUSH AX
文档评论(0)