版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 本章学习要点1、掌握宏汇编的基本概念 2、理解宏定义、宏调用、宏展开的特点和使用过程 3、了解重复汇编的基本概念和使用4、了解条件汇编的基本概念和使用第8章 高级汇编技术 1 什么是宏? 宏(或宏指令)是源程序中一段有独立功能的程序代码,只需定义一次,可以多次调用。 为什么使用宏汇编? 在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。 为了减少编程的工作量,通常采用两种方法: 将程序段编写为独立的子程序 将程序段定义成宏第8章 高级汇编技术 28.1 宏汇编 8.2 重复汇编 返回 第8章 高级汇编技术 退出38.1 宏汇编 8.1.1 宏定义、宏调用
2、和宏展开 8.1.2 形参和实参 8.1.3 伪指令PURGE 返 回 8.1.4 伪指令LOCAL 退 出48.1.1 宏定义、宏调用和宏展开 1.宏定义 用伪指令MACRO/ENDM实现,其语句格式是:宏指令名 MACRO 形参1,形参2,形参n 宏体 ENDM 例如,BCD码和ASCII码之间的转换,可将AL中的内容左移或右移定义成宏指令。5说明 宏指令名是该宏定义的名称。调用时使用宏指令名对该宏定义进行调用。 宏指令符合标识符规定。宏指令名不能重复,但可以和源程序中的其他变量、标号、指令、伪指令名相同,在这种情况下宏指令的优先级最高。 MACRO必须与ENDM成对出现。MACRO标识宏
3、定义的开始 。 形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时,多个形参间用逗号分隔。形参的规定与对标识符的规定是一致的 。68.1.1 宏定义、宏调用和宏展开 假设左移4位:SHIFT MACRO MOV CL,4 SAL AL,CL ENDM2.宏调用宏调用的格式为: 宏指令名 实参1,实参2,实参n 78.1.1 宏定义、宏调用和宏展开对于上例的宏定义,编程时宏调用语句为 SHIFT 宏展开 宏展开将宏指令语句用宏定义中宏体的程序段目标代码替换。汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,用实参替代相应的形参,对宏体目标代码作相应改变。 88.1.1 宏定
4、义、宏调用和宏展开例8.1 将两个用压缩的BCD码表示的4位十进制数相加,结果存入RESULT单元中 。;对两数相加功能进行宏定义 BCDADD MACRO VARX,VARY,RESULT MOV AL,VARX ADD AL,VARY DAA ;低位相加、调整 MOV RESULT,AL MOV AL,VARX1 ADC AL,VARY1 DAA ;高位相加、调整 MOV RESULT1,AL 98.1.1 宏定义、宏调用和宏展开 ENDMDATA SEGMENT A1 DB 30H,11H A2 DB 79H,47H A3 DB 2 DUP(?) B1 DB 32H,23H B2 DB
5、71H,62H B3 DB 2 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:PUSH DS MOV AX,0 PUSH AX 108.1.1 宏定义、宏调用和宏展开 MOV AX,DATA MOV DS,AX BCDADD A1,A2,A3 ;宏调用 BCDADD B1,B2,B3 ;再次宏调用 RETCODE ENDS END START经宏展开后: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AL,A1118.1.1 宏定义、宏调用和宏展开 ADD AL,A2 DA
6、A ;低位相加、调整 MOV A3,AL MOV AL,A11 ADC AL,A21 DAA ;高位相加、调整 MOV A31,AL ;对两数相加功能进行宏定义 MOV AL,B1 ADD AL,B2 DAA ;低位相加、调整 MOV B3,AL MOV AL,B11 ADC AL,B21128.1.1 宏定义、宏调用和宏展开 DAA ;高位相加、调整 MOV B31,AL 宏汇编程序在所展开的指令前标识以号以示区别。 宏定义允许嵌套。在宏定义中可以使用宏调用,但必须先定义这个宏调用。例8.3 有宏定义如下:DIFML MACRO OPRAND,OPRATOPRAND MACRO X,Y,Z
7、PUSH AX MOV AX,X OPRAT AX,Y MOV Z,AX POP AX138.1.1 宏定义、宏调用和宏展开 ENDM ENDM 对宏定义DIFML进行宏调用: DIFML ADDITION,ADD经宏展开: ADDITION MACRO X,Y,Z PUSH AX MOV AX,X ADD AX,Y MOV Z,AX POP AX ENDM为实现对ADDITION的调用,需要连续两条宏调用语句: DIFML ADDITION,ADD ADDITION N1,N2,N3148.1.2 形参和实参宏定义中可以不带任何形参,宏调用时不需提供实参(即使有实参,也会不予处理),宏展开后
8、宏体中的所有指令不作修改原样插入到宏调用的宏指令处。如例8.4。形参可以是操作码或操作数的一部分,但在宏定义体中必须使用分隔符&,即&是操作符,在宏定义中可作为形参的前缀,展开时把&前后的两个符号连接起来,形成操作码、操作数或字符串。&只能出现在宏定义中。如例8.6。 158.1.2 形参和实参在宏定义中,形参可以出现在宏体的任何位置,可以是操作码或操作数。如例8.3中OPRAT。伪操作%不能出现在形参的前面,通常用在宏调用中,将跟在它后面的表达式的值转换成以当前基数下的数,在宏展开时,用转换后的值代替形参。如例8.8。 在宏调用中的实参如果自身是带有间隔符(如逗号、空格),必须使用文本操作符
9、将它括起来,作为单一的完整的实参。如例8.9。168.1.2 形参和实参例8.4 将寄存器内容移位的操作定义为宏指令,并宏调用。设一个参数时,移位次数为参数CN: SHIFT MACRO CN MOV CL,CN SHL AX,CL ENDM 宏调用时提供相应的实参数值: SHIFT CONST 设两个参数时,参数为寄存器和移位次数: SHIFT MACRO CN,R MOV CL,CN SHL R,CL ENDM 宏调用提供移位次数和寄存器:SHIFT CONST,REG178.1.2 形参和实参例8.6 宏定义:SHIFT MARCO X,Y,Z MOV CL,X S&Z Y,CL END
10、M形参Z是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的分隔符,就不被当作形参,调用时也不会被实参代替。上例被调用时: SHIFT 4,AL,CL SHIFT 6,BX,AR则宏展开时的目标代码: MOV CL,4 SAL AL,CL MOV CL,6 SAR BX,CL188.1.2 形参和实参例8.8 宏定义:MAKER MACRO COUNT,STR MAKER&COUNT DB STR ENDMERRMA MACRO TEXT CNTR=CNTR1 MAKER %CNTR,TEXT ENDM经宏调用: 198.1.2 形参和实参 CNTR=0 ERRMA SYNTAX ER
11、ROR ERRMA INVALID OPERAND 宏展开: MAKER1 DB SYNTAX ERROR MAKER2 DB INVALID OPERAND 208.1.2 形参和实参例8.9 在程序设计中,对堆栈段的定义语句基本相同,只是堆栈段的长度和初值不同。所以可以先定义一个宏(放在宏库中),供随时取用,为编程带来很大方便。宏定义如下:MSTACK MACRO XYZSTACK SEGMENT STACK DB XYZ STACK ENDS ENDM宏调用时: MSTACK 100 DUP(?)宏展开为: STACK SEGMENT STACK DB 100 DUP(?) STACK
12、ENDS218.1.3 伪指令PURGE 宏指令名可以和源程序中的其他变量名、标号、指令助记符、伪操作名相同,此时宏指令的优先级别最高,使其他同名的指令或伪操作无效。为了使这些指令或伪指令恢复功能,服从机器指令的定义,宏汇编程序提供了伪操作PURGE,用来在适当的时候取消宏定义。 PURGE伪指令的一般格式是: PURGE 宏定义名,方括号表示PURGE可以取消多个宏定义,宏名之间用逗号隔开。如宏定义: SUB MACRO VARX,VARY,RESULT ENDM宏调用:SUB X,Y,Z PURGE SUB “PURGE SUB”语句后的SUB恢复减法功能。 228.1.4 伪指令LOCA
13、L 宏定义体内可以使用标号。对于使用了标号的宏定义,若多次调用,势必产生标号的多重定义,汇编时出错。解决这一问题可使用伪指令LOCAL,其一般格式为: LOCAL 局部标号1,局部标号2, 宏汇编程序将为标号分别生成格式为“?XXXX”的唯一的符号以代替各局部标号。XXXX代表四位十六进制数0000FFFF。这样,在汇编源程序中,避免了多次宏调用时生成的标号重复。注意:LOCAL伪操作只能用在宏定义体内,而且必须是MACRO伪操作后的第一个语句,在MACRO与LOCAL不能出现注释和分号标志。 238.1.4 伪指令LOCAL 例8.10 定义取绝对值的宏指令如下: ABS MACRO OPS
14、 LOCAL PLUS CMP OPS,0 JGE PLUS NEG OPS PLUS:MOV AX,OPS ENDM宏调用: ABS CX MOV BX,AX ABS DX248.1.4 伪指令LOCAL 宏展开后的指令为: CMP CX,0 JGE ?0000 NEG CX?0000:MOV AX,CX MOV BX,AX CMP DX,0 JGE ?0001 NEG DX?0001: MOV AX,DX 258.2 重复汇编 8.2.1 定重复伪指令REPT 8.2.2 不定重复伪指令IRP 8.2.3 不定重复字符伪指令IRPC 退 出返 回268.2.1 定重复伪指令REPT 其一般
15、格式为: REPT 表达式 (重复块 ) ENDM 其中,REPT和ENDM必须成对出现,两者间的重复块是要重复汇编的部分。表达式的值用来表示重复块的重复汇编次数。定重复伪操作不一定要用在宏定义体内。 278.2.1 定重复伪指令REPT 例8.11 有下列语句: NUM=0 REPT 10 NUM=NUM1 DB NUM ENDM 汇编后,将数据1,2,3,10分配给十个连续的字节单元: DB 1 DB 2 DB 3 DB 10 288.2.2 不定重复伪指令IRP 其一般格式为: IRP 形参,参数1,参数2, (重复块) ENDM 此伪指令重复执行重复块中所包含的语句,重复的次数由参数表
16、中的参数个数决定。重复汇编时,依次用参数表中的参数取代形参,直到表中的参数用完为止。参数表中的参数必须用两个三角号括起来,参数可以是常数、符号、字符串等,各参数间用逗号隔开。 298.2.2 不定重复伪指令IRP 例8.13 多次将AX、BX、CX、DX寄存器内容压栈,宏定义如下:PUSHR MACRO IRP REG,AX,BX,CX,DX PUSH REG ENDM ENDM汇编后: PUSH AX PUSH BX PUSH CX PUSH DX 308.2.3 不定重复字符伪指令IRPC 其语句格式为: IRPC 形参,字符串(或字符串) (重复块) ENDM 此伪指令重复执行重复块中的语句,重复汇编的次数等于字符串中字符的个数。每次重复执行时,依次用字符串中的一个字符取代形参,直到字符串结束。可见IRPC伪指令与IRP伪指令类似,只是IRPC用字符串(其三角括号可以有也可以无)代替了IRP伪指令中的参数表。318.2.3 不定重复字符伪指令IRPC 例8.15 如例8.13可用IRPC实现:PUSHR MACRO IRPC REG,ABCD PUSH REG&X ENDM ENDM同样,汇
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 古建工程保护与技术传播研究报告
- 化妆品行业高效研发与质量管理方案
- 成都市泡桐树小学五年级语文周考试卷含答案及解析
- 节能环保项目实施管理指南
- 2026学年七年级数学上册第六单元能力提升月考模拟含答案及解析
- 烟草数据统计分析工作手册
- 2026年乡镇干部乡村建设行动知识库
- 2026年肢体障碍学生康复治疗师招聘面试题及物理治疗解析
- 2026年构建亲清政商关系题库
- 航空运输管理与安全保障手册
- 泰山教育联盟2026届高三年级4月考试模拟 政治试题(含答案)
- 2026年成都市新都区街道办人员招聘笔试模拟试题及答案解析
- 2026年贪污贿赂司法解释(二)学习与解读课件
- 2026年上半年广东广州开发区黄埔区招聘事业单位18人备考题库含答案详解(典型题)
- 山西临汾市第一中学校2025-2026学年高一下学期第一次月考语文试题(含答案)(含解析)
- 春季呼吸道疾病护理课件
- 仓库人员安全责任制度
- 2026异位妊娠护理精要
- 2026年宠物医院员工保密协议
- 2026年小儿睾丸疼痛课件
- 水利监理单位安全生产责任制
评论
0/150
提交评论