《汇编语言PPT教学课件-第10章 高级汇编语言技术》由会员分享,可在线阅读,更多相关《汇编语言PPT教学课件-第10章 高级汇编语言技术(22页珍藏版)》请在金锄头文库上搜索。
1、第10章 高级汇编语言技术,主讲人:,10.1 宏汇编,在编写汇编语言程序的过程中,有的某个程序段要出现许多次,有的只是参数不同,但功能完全一样,则这样的程序段可以定义成一个指令,并且称它为宏指令。,10.1.1宏定义 宏是源程序中一段有独立功能的程序代码。它只需要在源程序中定义一次,就可以多次定义它,调用时只需用一个宏指令语句就可以了。 若想在汇编语言中使用宏指令,就要定义一个宏。宏定义是用一组伪操作来实现的。宏定义格式为: 宏指令名 MACRO 形参1,形参2, 宏体 ENDM,宏指令名:宏定义的名字,不可缺省,宏调用时需要用它,第一个符号必须是字母,其后可以是字母或数字。 MACROEN
2、DM:宏定义伪指令助记符,不可缺省。它们成对出现,表示宏定义的开始和结束,ENDM前不带宏指令名。 宏体:一段有独立功能的程序代码段。 形式参数:又称哑元、虚参,是可选项,带参数时候,各个形参之间用逗号隔开。,10.1.2 宏调用和宏展开 1、宏调用 在汇编语言中使用已定义过的宏指令,称为宏调用。宏调用格式为: 宏指令名 实参1,实参2, 宏调用只需要有宏指令名,如果宏定义中有形参,则宏调用时须带有实参来代替形参,实参的个数,顺序,类型要与形参一一对应,各个实参之间用逗号分开。原则上实参的个数与形参的个数相等,但汇编程序不要求它们必须相等,如果实参个数大于形参个数,那么多余的实参不予考虑,若实
3、参个数小于形参,则多余的形参作“空”处理。,2、宏展开 汇编程序在对源程序汇编时,对每个宏调用作宏展开,即用宏定义中的宏体取代宏指令名,并用实参一一对应代替形参。,10.1.3 宏调用中的参数使用 为了宏定义和引用的某些特殊需要,有的实参是由字符、空格等特殊符号组成的,因此汇编程序支持几个具有特定含义的操作符。 1、连接操作符& 在宏定义中,如果形式参数与其它字符连接在一起,或形式参数出现在字符串之中,使用连接操作符&。在宏指令定义的具体使用时,连接操作符&可以在形参的前面,也可在形参的后面。在宏指令展开时,对应形参的实参就与它前面或后面的符号连接在一起构成一个新的符号。,2、文本操作符 文本
4、操作符是一对尖括号,用它括起来的内容将作为一个字符串来进行形式参数的整体替换。在宏引用时,如果实参内包含逗号、空格等间隔符,则需要使用该操作符,以保证实参的完整性。如果实参是某个具有特殊含义的字符,为了使它只表示该字符本身,也需要用该操作符括起来。,3、表达式操作符 进行宏调用时,如要在实参中使用“”,则在宏指令调用时汇编程序将获取“”后常数表达式的值作为参数,而非表达式本身。,4、字符操作符! 字符操作符!的作用说明,“!”后的字符不是特殊字符,而是普通字符。对于包含在“”、“!”、“%”之间的文本串,汇编程序将以普通字符处理。如将“!”作为普通字符,则使用!。,10.1.4 宏嵌套 宏指令
5、定义中含有宏定义或者是宏指令定义中含有宏调用,这两种情况都称为宏嵌套。 宏定义中嵌套宏定义形式如下: ABCD_1 MACRO ABCD_2 MACRO ENDM ENDM ENDM,10.1.5 宏汇编中的伪指令 1、MACRO和ENDM 在前面的宏指令的定义中已经介绍过,这是宏操作时必不可少的指令,而且成对出现。,2、PURGE PURGE的功能是取消多个宏定义,即一个宏指令定义可以用伪指令PURGE来取消,然后可以再重新定义。经过定义的宏指令名,不允许重新定义,必须用PURGE语句将其取消后,才能重新定义,此语句可以取消多个宏指令名。 格式: PURGE 宏指令名1,宏指令名2, 取消宏
6、定义的含义是使该宏定义成为空,程序中如果出现一个已被取消宏定义的宏调 用,则汇编程序将不会指示出错,但它将忽略该宏调用,当然也不会予以展开。,3、LOCAL 某些宏定义中存在变量或标号,这些宏定义在同一程序中被多次调用且展开后,就会出现变量或标号重复定义的错误。LOCAL伪指令的使用可以避免此类错误。在宏展开时,让宏汇编程序自动为其后的形参顺序生成特殊符号(范围为?0000?FFFFH),并用这些特殊符号来取代宏体中的变量或标号,避免了符号重复定义的错误。 必须注意,LOCAL伪操作只能用在宏体内,而且它必须是MACRO伪操作后的第一句,在MACRO和LOCAL伪操作之间还允许有注释和分号标志
7、。 格式: LOCAL 形参1,形参2,,10.2 重复汇编,在编写源程序时,有时会出现连续相同或几乎完全相同的一组代码。当出现这种情况时,可利用重复伪指令来重复汇编,从而达到简化程序的目的。 重复汇编伪指令所定义的重复块是宏的一种特殊形式,也是由伪指令ENDM来结束重复块。用重复汇编伪指令定义的重复块也可带有参数,并在汇编过程中参数被实参代替,但重复块不会被命名,不能在程序的其它地方引用。,10.2.1 使用REPT伪指令的重复汇编结构 指令格式: REPT 表达式 重复语句序列 ENDM 指令以REPT开始,ENDM结束。其中,表达式是REPT与ENDM中间的语句序列需要重复的次数,可以是
8、具体数值,表达式中不能包含有任何外部的或没有定义的项,否则产生错误。,10.2.2 使用IRP伪指令的重复汇编结构 指令格式: IRP 形参, 重复语句序列 ENDM,10.2.3 使用IRPC伪指令的重复汇编结构 指令格式: IRPC 形参,字符串(或) 重复语句序列 ENDM 每当汇编重复语句序列时,汇编程序将依次用字符串中的一个字符替代形参,直到字符串中的字符替代完毕。重复次数由字符串中字符个数来确定。IRPC伪指令的形参也只能有一个。,10.2.4 条件汇编伪指令 PC机有8种条件汇编伪指令,它们是IF、IFE、IFDEF、IFNDET、IFB、IFNB、IFIDN、IFNIDN。 一
9、般格式是: IF XX 表达式 语句序列1 ELSE 语句序列2 ENDIF IF与ENDIF必须有,且成对出现,ELSE是可选的,其中IF XX是上述l0种条件汇编伪指令之一,XX为指定的条件,如果指定的条件成立,宏汇编程序将汇编语句序列1,否则汇编语句序列2。,10.3 宏指令与子程序的区别,宏汇编是用一条宏指令来代替一个程序段,可有效地源代码的书写长度,且格式清晰,调用方便。在某种意义上,子程序也有类似功能,但二者之间有明显的区别,主要区别在以下几个方面: 1 过程调用使用CALL语句,由CPU执行,宏指令调用由汇编程序中宏处理程序来识别。 2 过程调用时,每调用一次都要保留程序的断点和
10、保护现场,返回时要恢复现场和断点,增加了操作时间,执行速度慢。而宏指令调用时,不需要这些入栈和出栈操作,执行速度较快。,3 过程调用的子程序与主程序分开独立存在,经汇编后在存储器中只占一个子程序段的空间,主程序转入此处运行,因此目标代码长度短,节省内存空间。而宏调用是在汇编过程中,宏调用多少次,就插入多少次,故目标代码长度长,占内存空间多。 4 一个子程序设计,一般完成某个功能,多次调用完成相同操作,仅入口参数可以改变;而宏指令可以带形参,调用时可以用实参取代,使不同的调用完成不同的操作,增加使用的灵活性。 若多次调用的程序较长,速度要求不高,适宜用过程调用方法,若多次调用的程序较短,而操作又希望修改,适宜用宏指令。,谢谢!,