《汇编语言IBM-PC第七章th.ppt》由会员分享,可在线阅读,更多相关《汇编语言IBM-PC第七章th.ppt(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 高级汇编语言技术高级汇编语言技术宏汇编宏汇编重复汇编重复汇编条件汇编条件汇编为为用用户户提提供供更更加加容容易易、更更加加灵灵活活、更更加加向向高高级级语语言言靠靠拢拢的的汇编工具。汇编工具。7.1 7.1 宏汇编宏汇编宏宏:源程序中一段有独立功能的程序代码。:源程序中一段有独立功能的程序代码。宏指令宏指令:用户自定义的指令。在编程时,将多次使用的功能:用户自定义的指令。在编程时,将多次使用的功能用一条宏指令来代替。用一条宏指令来代替。汇编语言程序汇编语言程序指令指令伪指令(伪操作)伪指令(伪操作)宏指令宏指令1宏定义宏定义macro_namemacro_nameMACRO 哑元
2、表哑元表 ;形参形参/虚参虚参LOCAL标号表标号表(宏定义体)(宏定义体)ENDM*如如果果宏宏定定义义体体有有一一个个或或多多个个标标号号,则则必必须须用用LOCAL伪伪操操作作列出所有的标号。列出所有的标号。宏调用宏调用macro_namemacro_name 实元表实元表 ;实参实参*实元表中的实元与哑元表中的哑元在位置上一一对应实元表中的实元与哑元表中的哑元在位置上一一对应;*若实元数若实元数 哑元数,则多余的实元无效哑元数,则多余的实元无效;*若实元数若实元数 哑元数,则多余的哑元作哑元数,则多余的哑元作“空空(NUL)”)”处理处理;*对宏指令的调用必须先定义后调用。对宏指令的调
3、用必须先定义后调用。2宏展开宏展开 源源程程序序被被汇汇编编时时,汇汇编编程程序序把把宏宏调调用用展展开开,也也就就是是把把宏宏定定义义体体复复制制到到调调用用宏宏指指令令的的位位置置上上,同同时时用用实实元元取取代代哑哑元,由元,由LOCAL定义的标号也由定义的标号也由?0000?FFFF替代。替代。例例7.2 保存寄存器保存寄存器宏定义:宏定义:saveregsavereg MACROMACRO push ax push ax push bx push bx push cx push cx push dx push dx push si push si push di push di EN
4、DMENDM宏调用:宏调用:saveregsavereg宏展开:宏展开:+push ax+push ax +push bx +push bx +push cx +push cx +push dx +push dx +push si +push si +push di +push di3例例7.1两个字相乘两个字相乘宏定义:宏定义:multiplymultiply MACROMACRO opr1opr1,opr2opr2,resultresult push dx push dx push ax push ax mov ax,mov ax,opr1opr1 imul imul opr2opr2 m
5、ov mov resultresult,ax,ax pop ax pop ax pop dx pop dx ENDMENDM宏调用:宏调用:multiplymultiply cxcx,varvar,xyzbxxyzbx宏展开:宏展开:+push dx+push dx +push ax +push ax +mov ax,+mov ax,cxcx +imul +imul varvar +mov +mov xyzbxxyzbx,ax,ax +pop ax +pop ax +pop dx +pop dx4例例7.7宏指令名与指令助记符或伪操作名相同,宏指令宏指令名与指令助记符或伪操作名相同,宏指令的优
6、先级最高。的优先级最高。宏定义:宏定义:addadd MACROMACRO opr1,opr2,result opr1,opr2,result ENDMENDM宏调用:宏调用:addadd xx,yy,zz xx,yy,zzpurge purge add add ;取消宏定义取消宏定义5例例7.8求求绝绝对对值值(使使用用LOCAL伪伪操操作作)宏定义:宏定义:absolabsol MACROMACRO oper oper LOCAL LOCAL nextnext cmp oper,0 cmp oper,0 jge next jge next neg oper neg opernextnext
7、:ENDMENDM宏调用:宏调用:absol absol var varabsol absol bx bx宏展开:宏展开:+cmpvar,0+jge?0000+negvar+?0000:+cmpbx,0+jge?0001+negbx+?0001:6宏汇编操作符宏汇编操作符&;%符号符号1&符号符号2;宏展开时宏展开时,合并前后两个符号形成一个符号。合并前后两个符号形成一个符号。leap leap macromacro cond,lab cond,lab j j&cond labcond lab endmendm宏定义:宏定义:宏调用:宏调用:leap z,thereleap z,therele
8、ap nz,hereleap nz,here宏展开:宏展开:+jz there+jz there +jnz here+jnz here例例7.47.47;注释注释;宏展开时,宏展开时,;后面的注释不予展开。后面的注释不予展开。例:例:QMACROm;displayamessage每次展开保留此注释每次展开保留此注释;misastring每次展开不保留此注释每次展开不保留此注释ENDM%表达式表达式;汇编程序将汇编程序将%后面的表达式转换为数字,并在后面的表达式转换为数字,并在 展开期间用这个数取代哑元。展开期间用这个数取代哑元。8列表伪操作列表伪操作源源程程序序(ASM文文件件)经经汇汇编编程
9、程序序汇汇编编,主主要要输输出出是是OBJ文文件件和和LST文文件件(列列表表文文件件)。LST文文件件同同时时列列出出源源程程序序和和机机器器语语言言程程序清单,并给出符号表。序清单,并给出符号表。.LALL:在在LST清单中列出宏展开后的全部语句清单中列出宏展开后的全部语句(包括注释包括注释)。.SALL:在在LST清单中不列出任何宏展开后的语句。清单中不列出任何宏展开后的语句。.XALL:省略的列表方式,只列出产生目标代码的语句。省略的列表方式,只列出产生目标代码的语句。9宏调用与子程序调用的区别:宏调用与子程序调用的区别:子程序:在程序执行期间被调用,只占用自身大小的一段空间。子程序:
10、在程序执行期间被调用,只占用自身大小的一段空间。主程序主程序call call sub1sub1call call sub1sub1call call sub1sub1子程序子程序 sub1sub1 ret ret10宏调用:在汇编期间被展开宏调用:在汇编期间被展开,每调用一次就把宏定义体展开一次每调用一次就把宏定义体展开一次。宏定义宏定义宏调用宏调用宏展开宏展开Q macro x,yQ macro x,y endmendm Q a,b Q a,b Q c,d Q c,d Q e,f Q e,f 11子程序子程序:优点:模块化,节省内存,可被多次调用,编程效率高。优点:模块化,节省内存,可被多
11、次调用,编程效率高。缺点:额外开销(保存返回地址,计算转向地址,传递参缺点:额外开销(保存返回地址,计算转向地址,传递参 数等)大,增加了执行时间。适用于子功能代码较数等)大,增加了执行时间。适用于子功能代码较 长、调用比较频繁的情况。长、调用比较频繁的情况。宏调用宏调用:优点:参数传送简单,执行效率高。优点:参数传送简单,执行效率高。缺点:不节省空间,适用于子功能代码较短、传参较多的缺点:不节省空间,适用于子功能代码较短、传参较多的 情况。情况。127.2 7.2 重复汇编重复汇编用于连续产生完全相同或基本相同的一组代码。用于连续产生完全相同或基本相同的一组代码。重复伪操作重复伪操作REPT
12、格式:格式:REPT表达式表达式 ;重复块重复块 ENDM例例7.137.13X=0X=0 REPTREPT 10 10X=X+1X=X+1 DB X DB X ENDMENDM+DB 1+DB 1+DB 2+DB 2+DB 3+DB 3 +DB 10+DB 10汇编后:汇编后:13例例7.147.14 把把字字符符AA到到ZZ的的 ASCII ASCII 码码填填入入数数组组TABLETABLECHAR=ACHAR=ATABLE LABEL BYTETABLE LABEL BYTE REPTREPT 26 26 DB CHAR DB CHARCHAR=CHAR+1CHAR=CHAR+1 EN
13、DMENDM+DB 61H+DB 61H+DB 62H+DB 62H+DB 63H+DB 63H +DB 7AH+DB 7AH汇编后:汇编后:14不定不定重复伪操作重复伪操作IRP/IRPCIRP格式:格式:IRP 哑元,哑元,;重复块重复块ENDM每次重复用自变量表中的一项取代哑元,重复次数由自每次重复用自变量表中的一项取代哑元,重复次数由自变量的个数决定。变量的个数决定。例例7.187.18 IRPIRP REG,REG,PUSH REG PUSH REGENDMENDM+PUSH AX+PUSH AX+PUSH BX+PUSH BX+PUSH CX+PUSH CX+PUSH DX+PUS
14、H DX汇编后:汇编后:15例:在数据段产生字符区例:在数据段产生字符区arrayarray,包括,包括5 5个字符串个字符串NO.KNO.Kdata segmentdata segment array label byte array label byte IRP IRP K,K,db NO.&K db NO.&K ENDM ENDMdata endsdata endsdata segmentdata segment array label byte array label byte +db NO.1 +db NO.1 +db NO.2 +db NO.2 +db NO.3 +db NO.3
15、+db NO.4 +db NO.4 +db NO.5 +db NO.5data endsdata ends汇编后:汇编后:16IRPC格式:格式:IRPC 哑元,字符串哑元,字符串 ;重复块重复块ENDM每次重复用字符串中的一个字符取代哑元,重复次数等于每次重复用字符串中的一个字符取代哑元,重复次数等于字符串中的字符数。字符串中的字符数。例:在数据段产生字符区例:在数据段产生字符区arrayarray,包括,包括5 5个字符串个字符串NO.KNO.Kdata segmentdata segment array label bytearray label byte IRPC IRPC K,123
16、45 K,12345 db NO.&K db NO.&K ENDM ENDMdata endsdata endsdata segmentdata segment array label byte array label byte +db NO.1 +db NO.1 +db NO.2 +db NO.2 +db NO.3 +db NO.3 +db NO.4 +db NO.4 +db NO.5 +db NO.5data endsdata ends汇编后:汇编后:177.3 7.3 条件汇编条件汇编根据条件把一段源程序包括在汇编语言程序内,或者排除根据条件把一段源程序包括在汇编语言程序内,或者排除在外
17、。在外。一般一般格式:格式:IF自变量自变量;为条件为条件;自变量满足条件则汇编此块自变量满足条件则汇编此块ELSE;自变量不满足条件则汇编此块自变量不满足条件则汇编此块ENDIFIF IF 表达式表达式IFE IFE 表达式表达式IFDEF IFDEF 符号符号IFNDEF IFNDEF 符号符号IFB IFB IFNB IFNB IFIDN IFIDN ,2IFDIF IFDIF ,218例例7.21求最大值放入求最大值放入AX宏定义:宏定义:MAXMACROK,A,B,CLOCALNEXT,OUTMOVAX,AIFK-1IFK-2CMPC,AXJLENEXTMOVAX,CENDIFNEXT:CMPB,AXJLEOUTMOVAX,BENDIFOUT:ENDM宏调用:宏调用:MAX1,PMAX2,P,QMAX3,P,Q,R+MOVAX,P+?0002:CMPQ,AX+JLE?0003+MOVAX,Q+?0003:+MOVAX,P+CMPR,AX+JLE?0004+MOVAX,R+?0004:CMPQ,AX+JLE?0005+MOVAX,Q+?0005:+MOVAX,P+?0001:宏展开:宏展开:19第七章作业第七章作业Page1982007.17.37.47.107.1420
限制150内