《高级汇编语言技术教学课件》由会员分享,可在线阅读,更多相关《高级汇编语言技术教学课件(48页珍藏版)》请在金锄头文库上搜索。
1、汇编语言程序设计汇编语言程序设计Assembly Language Programming第七章 高级汇编语言技术2教学重点:教学重点:在掌握基本的汇编语言程序设计方法之后在掌握基本的汇编语言程序设计方法之后 进一步学习进一步学习如何提高编程效率如何提高编程效率的各种实用方法:的各种实用方法:宏汇编宏汇编重复汇编 重复汇编条件汇编 条件汇编统称宏结构宏结构宏(宏(MacroMacro)是汇编语言的一个特点,它是汇编语言的一个特点,它 是与子程序类似又独具特色的另一种是与子程序类似又独具特色的另一种简化源程简化源程 序的方法。序的方法。3宏宏具有宏名的一段汇编语句序列 宏定义时书写 宏指令宏指令
2、这段汇编语句序列的缩写 宏调用时书写 宏展开宏展开宏指令处用宏体代替的过程 宏汇编时实现7.1 宏汇编宏的使用有三个步骤宏的使用有三个步骤: :宏定义、宏调用、宏展开。宏定义、宏调用、宏展开。4macro_namemacro_name MACROMACRO 哑元表哑元表 (宏定义体)(宏定义体)ENDMENDM 宏定义哑元哑元 相当于相当于C C语言函数定义中形参,语言函数定义中形参,宏的参数宏的参数 功能强大,颇具特色;功能强大,颇具特色;宏定义体宏定义体 可以是任何合法的汇编语句,既可以可以是任何合法的汇编语句,既可以 是是硬指令序列硬指令序列,又可以是,又可以是伪指令序列伪指令序列, 也
3、可以使也可以使 用用已经定义过的宏指令已经定义过的宏指令或者嵌套进行或者嵌套进行宏定义宏定义;配合宏,还有配合宏,还有宏操作符宏操作符和和与宏有关的伪指令与宏有关的伪指令。7.1.1 7.1.1 宏的使用过程宏的使用过程5宏定义mainbeginmainbegin MACRO MACRO ; ;定义名为定义名为mainbeginmainbegin的宏的宏, ,无参数无参数movmov ax,dataax,data; ;宏定义体宏定义体movmov ds,axds,axENDMENDM; ;宏定义结束宏定义结束mainendmainend MACRO MACRO retnumretnum ; ;
4、带有哑元带有哑元retnumretnummovmov al,retnumal,retnum ; ;宏定义中使用参数宏定义中使用参数movmov ah,4ch ah,4chintint 21h 21hENDMENDM宏注释符7.1.1 7.1.1 宏的使用过程宏的使用过程6macro_name 实元表宏调用start:start:mainbeginmainbegin; ;宏调用,建立宏调用,建立DSDS内容内容dispmsgdispmsg string string;宏调用,显示字符串宏调用,显示字符串mainendmainend 0 0; ;宏调用,返回宏调用,返回DOSDOSend star
5、tend start宏调用的实质宏调用的实质在汇编过程中进行宏展开;在汇编过程中进行宏展开;实元实元 相当于相当于C C语言函数调用中的实参;语言函数调用中的实参;对宏指令的调用必须对宏指令的调用必须先定义后调用先定义后调用。7.1.1 7.1.1 宏的使用过程宏的使用过程7在汇编时,用宏定义体的 代码序列替代宏指令的过程宏展开宏展开的具体过程宏展开的具体过程当汇编程序扫描源程序当汇编程序扫描源程序遇到遇到已有定义的宏调用已有定义的宏调用时,即用相应的宏定义体取时,即用相应的宏定义体取 代源程序的宏指令,同时用代源程序的宏指令,同时用位置匹配的实参对形参位置匹配的实参对形参 进行取代;进行取代
6、;若实元数若实元数 哑元数,则哑元数,则多余的实元多余的实元无效无效; ;若实元数若实元数字符串传递操作符,用于括起字符串。在宏调用中,如果传递的字符串实参数含有逗号、空格 等间隔符号,则必须用这对操作符,以保证字符串 的完整。!转义操作符,用于指示其后的一个字符作为一般字符,不含特殊意义。宏操作符7.1.4 7.1.4 宏操作符宏操作符19例7.6 ( 使用 ; 注释); ; 注释注释宏展宏展 开时,开时,; ;后面的后面的 注释不予展开。注释不予展开。Q MACRO m; display a message 每次展开保留此注释; m is a string 每次展开不保留此注释ENDM7.
7、1.4 7.1.4 宏操作符宏操作符20leap macro cond, labj ; 重复块重复块ENDMENDM例7.13 X=0REPT 10 X=X+1DB XENDM1 DB 1 1 DB 2 1 DB 3 1 DB 10汇编后:7.2.1 重复伪操作REPT7.2 7.2 重复汇编重复汇编34CHAR=aTABLE LABEL BYTEREPT 26DB CHARCHAR=CHAR+1ENDM1 DB 61H1 DB 62H1 DB 63H1 DB 7AH汇编后:例7.14 把字符A到Z的 ASCII 码填入数组TABLE35IRP格式: IRP 哑元, ; 重复块ENDM每次重复
8、用自变量表中的一项取代哑元,重复次数由自变量 的个数决定。例7.15 IRP REG, PUSH REGENDM1 PUSH AX1 PUSH BX1 PUSH CX1 PUSH DX汇编后:7.2.2 不定重复伪操作 IRP36data segmentarray label byteIRP K, db NO. ; 重复块重复块ENDMENDM每次重复用字符串中的一个字符取代哑元,重复每次重复用字符串中的一个字符取代哑元,重复次数等于字符串中的字符数。次数等于字符串中的字符数。例:在数据段产生字符区例:在数据段产生字符区arrayarray,包括,包括5 5个字符串个字符串 NO.KNO.K7
9、.2.3 不定重复伪操作 IRPC38按参数字符个数重复IRPCIRPC regad,dcbaregad,dcbapop 为条件 ; 自变量满足条件则汇编此块ELSE ; 自变量不满足条件则汇编此块ENDIF7.3 条件汇编41IF 表达式 IFE 表达式 IFDEF 符号 IFNDEF 符号 IFB IFNB IFIDN , IFDIF ,详见Page 266 常见条件汇编语句42pdatamacro numIF num lt 100;如果num mov ah,4ch;没有参数 elsemov ax,4c00h+(retnum AND 0ffh) ; 有参数 endif int 21h EN
10、DM46.model small .stack 256 .data msg1equ this byte dstring msg2equ this byte dstring .code start: mainbegin data;建立DS内容 dispmsg msg1;显示msg1字符串 dispmsg msg2;显示msg2字符串 mainend;返回DOS end start47宏定义: MAX MACRO K, A, B, CLOCAL NEXT, OUTMOV AX, AIF K-1IF K-2CMP C, AXJLE NEXTMOV AX, CENDIF NEXT: CMP B, AX
11、JLE OUTMOV AX, BENDIF OUT:ENDM宏调用: MAX 1, P MAX 2, P, Q MAX 3, P, Q, R1 MOV AX, P 1 ?0002: CMP Q, AX 1 JLE ?0003 1 MOV AX, Q 1 ?0003:1 MOV AX, P 1 CMP R, AX 1 JLE ?0004 1 MOV AX, R 1 ?0004: CMP Q, AX 1 JLE ?0005 1 MOV AX, Q 1 ?0005:1 MOV AX, P 1 ?0001: 宏展开:例7.18 求最大值放入AX487.1 7.27.6 7.9 7.11 7.137.14 7.16作 业