第七章高级汇编语言技术.ppt

上传人:本田雅阁 文档编号:2257440 上传时间:2019-03-12 格式:PPT 页数:42 大小:199.51KB
返回 下载 相关 举报
第七章高级汇编语言技术.ppt_第1页
第1页 / 共42页
第七章高级汇编语言技术.ppt_第2页
第2页 / 共42页
第七章高级汇编语言技术.ppt_第3页
第3页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第七章高级汇编语言技术.ppt》由会员分享,可在线阅读,更多相关《第七章高级汇编语言技术.ppt(42页珍藏版)》请在三一文库上搜索。

1、1,第七章 高级汇编语言技术,7.1 宏汇编 7.2 重复汇编 7.3 条件汇编,宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法,统称宏结构,2,7.1 宏汇编,在汇编语言中,如果在源程序中多次使用到同一个程序段,则可以将这个程序段定义成一个“指令”,叫宏指令。,仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变 通过形参、实参结合实现参数传递,简捷直观、灵活多变,还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢 需要利用寄存器、存储单元或堆栈等

2、传递参数,共同点:简化源程序的书写;节省编程的工作量,4,宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法 通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序,5,7.1 宏汇编,宏:具有宏名的一段汇编语句序列 宏定义时书写 宏指令:这段汇编语句序列的缩写 宏调用时书写 宏展开:宏指令处用这段宏代替的过程 宏汇编时实现 宏的参数功能强大,颇具特色 配合宏,还有宏操作符和有关伪指令,6,一、宏定义,mainbegin MACRO ;定义名为mainbegin的宏,无参数 mov ax,data ;宏定义体 mov ds,ax ENDM ;宏

3、定义结束,宏名 macro 形参表 宏定义体 endm,mainend MACRO retnum ;带有形参retnum mov al, 0 mov ah, retnum ;宏定义中使用参数 int 21h ENDM,7,宏调用及其展开,start: mainbegin ;宏调用,建立DS内容 mainend 4ch ;宏调用,返回DOS end start,宏名 实参表,宏调用的实质是在汇编过程中进行宏展开 对于宏来说,先定义,后调用。 宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代,8,宏展开,sta

4、rt: mainbegin ;宏指令 1 mov ax,data ;宏展开 1 mov ds,ax mainend 4ch ;宏指令 1 mov al,0 ;宏展开 1 mov ah,4ch 1 int 21h,在汇编时,用宏定义体的代码序列替代宏指令的过程,宏展开 当宏汇编程序扫描到宏指令语句(即宏调用)时,宏汇编程序就把宏指令定义中宏体的程序段代码替代宏指令语句。 若是带参数的宏调用,则同时用相应的实参替代宏体中对应形参的位置,并对原有宏体代码作修改。,10,宏展开,下面是一个源程序的列表文件,它展示了宏定义、宏调用和宏展开的全部过程。 在列表文件中,左边带“+”号的指令是宏汇编程序在宏展

5、开时自动生成的指令。 宏定义本身不生成任何目标代码,宏指令语句本身也不生成目标代码,它仅表示宏调用出现的位置。,EXCH_MEM MACRO MEM_l,MEM_2,REG MOV REG,MEM_1 XCHG REG,MEM_2 MOV MEM_1,REG ENDM DATA SEGMENT DA_W1 DW 55AAH DA_W2 DW 6688H DATA ENDS CODE SECMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX ,;宏调用和宏展开 EXCH_MEM DA_W1,DA_W2,AX ;宏指令

6、语句 + MOV AX ,DA_Wl + XCHG AX,DA_W2 + MOV DA_W1,AX MOV AH,4CH INT 21H CODE ENDS END START,13,子程序调用和宏调用的区别,子程序时在程序执行期间由主程序调用的,它只占有它自身大小的一个空间 宏调用是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关。,14,宏的参数,可以无参数,例如mainbegin 可以带有一个参数,例如mainend 也可以具有多个参数; 参数可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式; 宏定义体可以是任何合法的汇编语句,

7、既可以是硬指令序列,又可以是伪指令序列;,15,;宏定义 shlext macro shloprand,shlnum push cx mov cl,shlnum shl shloprand,cl pop cx endm ;宏指令 shlext ax,6 ;宏展开 1 push cx 1 mov cl,06 1 shl ax,cl 1 pop cx,16,宏的参数,为了宏定义和引用的某些特殊需要,有时实参是由字符、空格等特殊符号组成的,因此汇编程序支持几个具有特定含义的运算符。 1连接运算符& 在宏定义中,如果形式参数与其它字符连接在一起,或形式参数出现在字符串之中,那么,就必须使用连接运算符(

8、&)。在宏指令定义的具体使用时,连接操作符&可以在形参的前面,也可在形参的后面。在宏指令展开时,对应形参的实参就与它前面或后面的符号连接在一起构成一个新的符号。,;宏定义 LEAP MACRO COND,LAB J宏展开 JZ THERE JNZ HERE,18,宏的参数,2. 文本操作符 文本操作符是一对尖括号,用它括起来的内容将作为一个字符串来进行形式参数的整体替换。 在宏引用时,如果实参内包含逗号、空格等间隔符,则必须使用该操作符,以保证实参的完整性。如果实参是某个具有特殊含义的字符,为了使它只表示该字符本身,也需要用该运算符括起来。,NUMBER MACRO THEDATA DB TH

9、EDATA ENDM 假设在程序中调用此宏指令: DATA SEGMENT NUMBER DATA ENDS 则宏展开为: DATA SEGMENT DB 1,3,5 DATA ENDS 如果不加,则在宏展开为: DB 1 ; 而3,5按规则被忽略,20,宏的参数,3 表达式操作符 进行宏调用时,如要在实参中使用“”,则在宏指令调用时宏汇编程序将获取“”后常数表达式的值作为参数,而非表达式本身。,NUMBER MACRO X,Y,Z, DB X,Y,Z ENDM 若宏调用为: I EQU 10 J EQU 50 NUMBER 16,I+J,J-I 则相应的宏展开为: DB 16,60,40,2

10、2,宏的参数,4字符操作符! 字符操作符!的使用表明,“!”后的字符不是特殊字符,而是普通字符。这样对于包含在“”、“!”、“%”之间的文本串,汇编程序将能以普通字符处理。如将“!”作为普通字符,则使用!。,例如宏指令定义: DEFIN_ST MACRO STRING DB &String&S ENDM 则宏调用: DEFIN_ST 0):$ 其宏展开为: DB Please Input a Integer(0):$,24,宏嵌套,宏指令定义中还含有宏定义或者是宏指令的定义中含有宏调用,这两种情况都称为宏嵌套。 1. 宏定义中嵌套宏定义 ABCD_1 MACRO ABCD_2 MACRO EN

11、DM ENDM,宏指令定义中嵌套宏定义实例 INIT_1 MACRO X,Y,Z SHIFT_&Y MACRO MOV CL,X S&Z Y,CL ENDM ENDM 如采用下面的宏调用: INIT_1 2,BX,AR ;即将BX算术右移2位的宏指令 则相应的宏展开为: SHIFT_BX MACRO MOV CL,2 SAR BX,CL ENDM,26,宏嵌套,2 在宏定义中嵌套宏调用 在宏定义中嵌套宏调用的基本形式为:这种嵌套形式比较简单,只需在宏定义中(像在程序中一样)写出宏指令即可。但必须先定义,后调用。,27,宏嵌套,ABCD_l MACRO ;定义一个宏 ENDM ABCD_2 MA

12、CRO ABCD_l ;在宏定义中调用宏 ENDM,28,局部标号伪指令 LOCAL 标号列表 宏定义体采用了标号,应使用LOCAL加以说明 它必须是宏定义MACRO语句之后的第一条语句,与宏有关的伪指令,29,与宏有关的伪指令-LOCAL 标号列表,某些宏定义中存在变量或标号,这些宏定义在同一程序中被多次调用且展开后,就会出现变量或标号重复定义的错误。 LOCAL伪指令的使用可以避免此类错误。在宏展开时,让宏汇编程序自动为其后的形参顺序生成特殊符号 (范围为?0000?FFFFH),并用这些特殊符号来取代宏体中的形参,避免了符号重复定义的错误。 格式: LOCAL 形参1,形参2,30,;宏

13、定义 Absol macro oprd local next cmp oprd,0 jge next neg oprd next: endm,;宏调用 absol word ptr bx absol bx ;宏展开 1 cmp word ptr bx,0 1 jge ?0000 1 neg word ptr bx 1 ?0000: 1 cmp bx,0 1 jge ?0001 1 neg bx 1 ?0001:,31,与宏有关的伪指令,宏定义删除伪指令 PURGE 宏名表 不需要某个宏定义时,可以把它删除 格式: PURGE 宏指令名1 ,宏指令名2 取消宏定义的含义是使该宏定义成为空,程序中

14、如果出现一个已被取消宏定义的宏调 用,则汇编程序将不会指示出错,但它将忽略该宏调用,当然也不会予以展开。,32,与宏有关的伪指令,宏定义退出伪指令 EXITM 伪指令EXITM表示结束当前宏调用的展开,33,宏库的建立和调用,有些宏指令在应用过程中效果较好,因此在以后的汇编语言编程时就不必每次在源程序中重复编制一个宏指令定义,这样也可减少重复编写时的错误,可以把几个宏定义组成一个宏库,以文件形式供其它源程序调用。 当需要宏库文件中的宏定义时,可在新编制的源程序中使用INCLUDE伪指令。宏汇编程序在汇编源程序时,如果遇到INCLUDE伪指令时,就把这伪指令的宏库文件扫描一遍,如同在这个程序中自

15、己定义的宏一样,在后面的程序中就可以对宏库中的宏定义直接进行宏调用。,34,二、重复汇编,重复汇编指在汇编过程中,重复展开一段(基本)相同的语句 重复汇编没有名字,不能被调用 重复汇编常用在宏定义体中,也可以在一般汇编语句中使用 重复汇编伪指令有三个: REPEAT按参数值重复 FOR按参数个数重复 FORC按参数的字符个数重复 最后,用ENDM结束,35,char = A REPEAT 26 db char char = char +1 ENDM,1 db char ;等效于db A 1 char = char +1 1 db char ;等效于db B 1 char = char +1 .

16、 1 db char ;等效于db Z 1 char = char +1,36,FOR regad, push regad ENDM,1 push ax 1 push bx 1 push cx 1 push dx,37,FOR regad,dcba pop ®ad&x ENDM,1 pop dx 1 pop cx 1 pop bx 1 pop ax,38,不定重复伪操作,IRP伪操作 格式: IRP 形参, 重复语句序列 ENDM 每次重复汇编语句序列时,就用一个实参替代形参。第一次用第一个实参替代形参,第二次用第二个实参替代形参,直到所有实参用完为止。重复汇编次数由尖括号括起来的实参个

17、数所决定。注意实参必须用尖括号括起来,各个实参之间用逗号分开,如果实参为空,汇编程序则约定跳过IRP与ENDM之间的语句,IRP伪指令的形参只能有一个。,39,不定重复伪操作,IRP重复汇编结构举例 IRP REG, PUSH REG ENDM 经汇编展开后为: PUSH AX PUSH BX PUSH CX PUSH DX,40,不定重复伪操作,IRPC伪指令 指令格式: IRPC 形参, 重复语句序列 ENDM 每当汇编重复语句序列时,汇编程序将依次用字符串中的一个字符替代形参,直到字符串中的字符替代完毕。重复次数由字符串中字符个数来确定。 IRPC和IRP类似,但自变量表必须是字符串,41,三、条件汇编,条件汇编伪指令在汇编过程中,根据条件决定汇编的语句,IFxx 表达式 ;满足,汇编分支语句体1 分支语句体1 ELSE ;不满足,汇编分支语句体2 分支语句体2 ENDIF ;条件汇编结束,条件汇编伪指令,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1