微型计算机原理与汇编语言程序设计教学课件 第8章 高级汇编技术

上传人:w****i 文档编号:94647722 上传时间:2019-08-10 格式:PPT 页数:34 大小:285.50KB
返回 下载 相关 举报
微型计算机原理与汇编语言程序设计教学课件 第8章 高级汇编技术_第1页
第1页 / 共34页
微型计算机原理与汇编语言程序设计教学课件 第8章 高级汇编技术_第2页
第2页 / 共34页
微型计算机原理与汇编语言程序设计教学课件 第8章 高级汇编技术_第3页
第3页 / 共34页
微型计算机原理与汇编语言程序设计教学课件 第8章 高级汇编技术_第4页
第4页 / 共34页
微型计算机原理与汇编语言程序设计教学课件 第8章 高级汇编技术_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《微型计算机原理与汇编语言程序设计教学课件 第8章 高级汇编技术》由会员分享,可在线阅读,更多相关《微型计算机原理与汇编语言程序设计教学课件 第8章 高级汇编技术(34页珍藏版)》请在金锄头文库上搜索。

1、1,本章学习要点 1、掌握宏汇编的基本概念 2、理解宏定义、宏调用、宏展开的特点和使用过程 3、了解重复汇编的基本概念和使用 4、了解条件汇编的基本概念和使用,第8章 高级汇编技术,2,什么是宏? 宏(或宏指令)是源程序中一段有独立功能的程序代码,只需定义一次,可以多次调用。 为什么使用宏汇编? 在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。 为了减少编程的工作量,通常采用两种方法: 将程序段编写为独立的子程序 将程序段定义成宏,第8章 高级汇编技术,3,8.1 宏汇编,8.2 重复汇编,返回,第8章 高级汇编技术,退出,4,8.1 宏汇编,8.1.1

2、 宏定义、宏调用和宏展开,8.1.2 形参和实参,8.1.3 伪指令PURGE,返 回,8.1.4 伪指令LOCAL,退 出,5,8.1.1 宏定义、宏调用和宏展开,1.宏定义 用伪指令MACRO/ENDM实现,其语句格式是: 宏指令名 MACRO 形参1,形参2,形参n 宏体 ENDM 例如,BCD码和ASCII码之间的转换,可将AL中的内容左移或右移定义成宏指令。,6,说明,宏指令名是该宏定义的名称。调用时使用宏指令名对该宏定义进行调用。 宏指令符合标识符规定。宏指令名不能重复,但可以和源程序中的其他变量、标号、指令、伪指令名相同,在这种情况下宏指令的优先级最高。 MACRO必须与ENDM

3、成对出现。MACRO标识宏定义的开始 。 形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时,多个形参间用逗号分隔。形参的规定与对标识符的规定是一致的 。,7,8.1.1 宏定义、宏调用和宏展开,假设左移4位: SHIFT MACRO MOV CL,4 SAL AL,CL ENDM,2.宏调用 宏调用的格式为: 宏指令名 实参1,实参2,实参n,8,8.1.1 宏定义、宏调用和宏展开,对于上例的宏定义,编程时宏调用语句为 SHIFT ,宏展开 宏展开将宏指令语句用宏定义中宏体的程序段目标代码替换。汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,用实参替代相应的形参,对宏

4、体目标代码作相应改变。,9,8.1.1 宏定义、宏调用和宏展开,例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,10,8.1.1 宏定义、宏调用和宏展开,ENDM DATA SEGMENT A1 DB 30H,11H A2 DB 79H,47H A3 DB 2

5、DUP(?) B1 DB 32H,23H B2 DB 71H,62H B3 DB 2 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:PUSH DS MOV AX,0 PUSH AX,11,8.1.1 宏定义、宏调用和宏展开,MOV AX,DATA MOV DS,AX BCDADD A1,A2,A3 ;宏调用 BCDADD B1,B2,B3 ;再次宏调用 RET CODE ENDS END START 经宏展开后: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AL,A

6、1,12,8.1.1 宏定义、宏调用和宏展开, ADD AL,A2 DAA ;低位相加、调整 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,B21,13,8.1.1 宏定义、宏调用和宏展开, DAA ;高位相加、调整 MOV B31,AL 宏汇编程序在所展开的指令前标识以号以示区别。 宏定义允许嵌套。在宏定义中可以使用宏调用,但必须先定义这个宏调用。 例8.3 有宏定义如下: DI

7、FML MACRO OPRAND,OPRAT OPRAND MACRO X,Y,Z PUSH AX MOV AX,X OPRAT AX,Y MOV Z,AX POP AX,14,8.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,N3,15,8.1.2

8、 形参和实参,宏定义中可以不带任何形参,宏调用时不需提供实参(即使有实参,也会不予处理),宏展开后宏体中的所有指令不作修改原样插入到宏调用的宏指令处。如例8.4。 形参可以是操作码或操作数的一部分,但在宏定义体中必须使用分隔符&,即&是操作符,在宏定义中可作为形参的前缀,展开时把&前后的两个符号连接起来,形成操作码、操作数或字符串。&只能出现在宏定义中。如例8.6。,16,8.1.2 形参和实参,在宏定义中,形参可以出现在宏体的任何位置,可以是操作码或操作数。如例8.3中OPRAT。 伪操作%不能出现在形参的前面,通常用在宏调用中,将跟在它后面的表达式的值转换成以当前基数下的数,在宏展开时,用

9、转换后的值代替形参。如例8.8。 在宏调用中的实参如果自身是带有间隔符(如逗号、空格),必须使用文本操作符将它括起来,作为单一的完整的实参。如例8.9。,17,8.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,REG,18,

10、8.1.2 形参和实参,例8.6 宏定义: SHIFT MARCO X,Y,Z MOV CL,X S&Z Y,CL ENDM 形参Z是操作码的一部分。宏汇编中规定,若宏定义体中的形 参没有适当的分隔符,就不被当作形参,调用时也不会被实 参代替。上例被调用时: SHIFT 4,AL,CL SHIFT 6,BX,AR 则宏展开时的目标代码: MOV CL,4 SAL AL,CL MOV CL,6 SAR BX,CL,19,8.1.2 形参和实参,例8.8 宏定义: MAKER MACRO COUNT,STR MAKER&COUNT DB STR ENDM ERRMA MACRO TEXT CNTR

11、=CNTR1 MAKER %CNTR,TEXT ENDM 经宏调用:,20,8.1.2 形参和实参,CNTR=0 ERRMA SYNTAX ERROR ERRMA INVALID OPERAND 宏展开: MAKER1 DB SYNTAX ERROR MAKER2 DB INVALID OPERAND ,21,8.1.2 形参和实参,例8.9 在程序设计中,对堆栈段的定义语句基本相同,只是堆栈段的长度和初值不同。所以可以先定义一个宏(放在宏库中),供随时取用,为编程带来很大方便。宏定义如下: MSTACK MACRO XYZ STACK SEGMENT STACK DB XYZ STACK E

12、NDS ENDM 宏调用时: MSTACK 100 DUP(?) 宏展开为: STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS,22,8.1.3 伪指令PURGE,宏指令名可以和源程序中的其他变量名、标号、指令助记符、伪操作名相同,此时宏指令的优先级别最高,使其他同名的指令或伪操作无效。为了使这些指令或伪指令恢复功能,服从机器指令的定义,宏汇编程序提供了伪操作PURGE,用来在适当的时候取消宏定义。 PURGE伪指令的一般格式是: PURGE 宏定义名, 方括号表示PURGE可以取消多个宏定义,宏名之间用逗号隔开。如宏定义: SUB MACRO VARX

13、,VARY,RESULT ENDM 宏调用:SUB X,Y,Z PURGE SUB “PURGE SUB”语句后的SUB恢复减法功能。,23,8.1.4 伪指令LOCAL,宏定义体内可以使用标号。对于使用了标号的宏定义,若多次调用,势必产生标号的多重定义,汇编时出错。解决这一问题可使用伪指令LOCAL,其一般格式为: LOCAL 局部标号1,局部标号2, 宏汇编程序将为标号分别生成格式为“?XXXX”的唯一的符号以代替各局部标号。XXXX代表四位十六进制数0000FFFF。这样,在汇编源程序中,避免了多次宏调用时生成的标号重复。 注意:LOCAL伪操作只能用在宏定义体内,而且必须是MACRO伪

14、操作后的第一个语句,在MACRO与LOCAL不能出现注释和分号标志。,24,8.1.4 伪指令LOCAL,例8.10 定义取绝对值的宏指令如下: ABS MACRO OPS LOCAL PLUS CMP OPS,0 JGE PLUS NEG OPS PLUS:MOV AX,OPS ENDM 宏调用: ABS CX MOV BX,AX ABS DX,25,8.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,26

15、,8.2 重复汇编,8.2.1 定重复伪指令REPT,8.2.2 不定重复伪指令IRP,8.2.3 不定重复字符伪指令IRPC,退 出,返 回,27,8.2.1 定重复伪指令REPT,其一般格式为: REPT 表达式 (重复块 ) ENDM 其中,REPT和ENDM必须成对出现,两者间的重 复块是要重复汇编的部分。表达式的值用来表示重 复块的重复汇编次数。定重复伪操作不一定要用在 宏定义体内。,28,8.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,29,8.2.2 不定重复伪指令IRP,其一般格式为: IRP 形参,参数1,参数2, (重复块) ENDM 此伪指令重复执行重复块中所包含的语句,重复的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号