收藏 分销(赏)

汇编语言第7章.ppt

上传人:知****运 文档编号:14622787 上传时间:2026-10-22 格式:PPT 页数:47 大小:1.57MB 下载积分:10 金币
下载 相关
汇编语言第7章.ppt_第1页
第1页 / 共47页
汇编语言第7章.ppt_第2页
第2页 / 共47页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第7章 高级汇编语言技术,7.1 宏汇编,7.2 重复汇编,7.3 条件汇编,7.1 宏汇编,7.1.1 宏定义、宏调用和宏展开,7.1.2 宏定义中的参数,7.1.3 LOCAL伪操作,7.1.4 在宏定义中使用宏,7.1.5 列表伪操作,7.1.6 宏库的建立与调用,7.1.7 PURGE伪操作,7.1.1 宏定义、宏调用和宏展开,宏是源程序中一段有独立功能的程序代码。,宏定义是用一组伪操作来实现的,定义后的指令叫宏指令,其格式为:,macro name MACRO dummy parameter list,ENDM,其中dummy parameter list称为哑元表。,汇编语言程序,指令,伪指令(伪操作),宏指令,【例7.1】用宏指令定义2个字操作数相乘,得到一个字作为结果,宏定义:,MULTIPLY MACRO OPR1,OPR2,RESULT,PUSH DX,PUSH AX,MOV AX,OPR1,IMUL OPR2,MOV RESULT,AX,POP AX,POP DX,ENDM,宏调用:,MULTIPLY CX,VAR,XYZBX,MULTIPLY 240,BX,SAVE,宏展开:,PUSH DX,PUSH AX,MOV AX,CX,IMUL VAR,MOV XYZBX,AX,POP AX,POP DX,PUSH DX,PUSH AX,MOV AX,240,IMUL BX,MOV SAVE,AX,POP AX,POP DX,优:模块化,省内存,缺:开销大,宏定义:,Q macro x,y,endm,主程序:,Q a,b,Q c,d,Q e,f,目标程序:,优:,参数传送简单,执行效率高,缺:,占用内存空间大,主程序:,CALL -,CALL -,CALL -,子程序:,RET,7.1.2 宏定义中的参数,【例7.2】宏定义可以无变元,【例7.3】变元可以是操作码,【例7.4】【例7.5】变元可以是操作码的一部分,&为分隔符,【例7.6】变元可以是ASCII串,【例7.7】%的使用,【例7.2】宏定义可以无变元,宏定义:,SAVEREG MACRO,PUSH AX,PUSH BX,PUSH CX,PUSH DX,PUSH SI,PUSH DI,ENDM,宏调用:,SAVEREG,【例7.4】变元可以是操作码的一部分,但在宏定义体中必须用,&,作为分隔符.,宏定义:,LEAP MACRO COND,LAB,J&COND LAB,ENDM,宏调用:,LEAP Z,THERE,LEAP NZ,HERE,宏展开:,1 JZ THERE,1 JNZ HERE,【例7.6】变元可以是ASCII串,宏定义:,MSGGEN MACRO LAB,NUM,XYZ,LAB&NUM DB HELLO MR.&XYZ,ENDM,宏调用:,MSGGEN MSG,1,TAYLOR,宏展开:,1 MSG1 DB HELLO MR.TAYLOR,7.1.3 LOCAL伪操作,【例7.8】宏定义体中允许使用标号,ABSOL MACRO OPER,CMP OPER,0,JGE NEXT,NEG OPER,NEXT:,ENDM,如果程序中多次调用该宏定义,则展开时会出现标号的重复定义,这是不允许的。,为此系统提供了LOCAL伪操作,其格式为:,LOCAL list of local labels,本例应定义为:,ABSOL MACRO OPER,LOCAL NEXT,CMP OPER,0,JGE NEXT,NEG OPER,NEXT:,ENDM,宏调用:,ABSOL VAR,ABSOL BX,宏展开:,1 CMP VAR,0,1 JGE?0000,1 NEG VAR,1?0000:,1 CMP BX,0,1 JGE?0001,1 NEG BX,1?0001:,7.1.4 在宏定义中使用宏,【例7.9】宏定义中允许使用宏,条件是先定义后调用,宏定义:,DIFMICRO X,Y,MOVAX,X,SUBAX,Y,ENDM,DIFSQRMACRO OPR1,OPR2,RESULT,PUSHDX,PUSHAX,DIFOPR1,OPR2,IMULAX,MOVRESULT,AX,POPAX,POPDX,ENDM,宏调用:,DIFSQRVAR1,VAR2,VAR3,宏展开:,1PUSHDX,1PUSHAX,2MOVAX,VAR1,2SUBAX,VAR2,1IMULAX,1MOVVAR3,AX,1POPAX,1POPDX,【例7.10】,宏定义:,INT21MACRO FUNCTN,MOVAH,FUNCTN,INT 21H,ENDM,DISPMACRO CHAR,MOVDL,CHAR,INT2102H,ENDM,宏调用:,DISP?,宏展开:,1MOVDL,?,2MOVAH,02H,2INT21H,宏调用:,DEFMACSUBTRACT,SUB,;能形成减法宏定义,宏调用:,DEFMACLOGOR,OR,;能形成逻辑或宏定义,加法宏定义宏调用:,ADDITIONVAR1,VAR2,VAR3,宏展开:,1PUSHAX,1MOVAX,VAR1,1ADDAX,VAR2,1MOVVAR3,AX,1POPAX,7.1.5 列表伪操作,.XALL 默认,在LST清单中只列出产生目标码的宏展开;,.LALL 在LST清单中列出包括注释在内的所有宏展开;,.SALL 在LST清单中不列出任何宏展开信息。,.modelsmall,.stack200h,.data,mess1 db Customer name?,13,10,$,Mess2 db Customer address?,13,10,$,.code,beginprocfar,.sall,initz,.xall,promptmess1,.lall,promptmess2,.xall,finish,beginendp,endbegin,0000beginprocfar,.sall,initz,.xall,prompt mess1,0007 B4 09 1movah,09h,0009 8D 16 0000 R 1leadx,mess1,000D CD 21 1int21h,.lall,prompt mess2,1;,1;,000F B4 09 1movah,09h,0011 8D 16 0011 R 1leadx,mess2,0015 CD 21 1int21h,.xall,finish,0017 B8 4C00 1movax,4c00h,001A CD 21 1int21h,001Cbeginendp,macro.mac文件:,initzmacro,movax,data,movds,ax,moves,ax,endm,promptmacromessage,movah,09h,leadx,message,int21h,endm,finishmacro,movax,4c00h,int21h,endm,主程序:,includemacro.mac,.modelsmall,.stack200h,.data,mess1 db Customer name?,13,10,$,mess2 db Customer address?,13,10,$,.code,beginprocfar,initz,promptmess1,promptmess2,finish,beginendp,endbegin,0000beginprocfar,initz,0000 B8-R 1movax,data,0003 8E D8 1movds,ax,0005 8E C0 1moves,ax,promptmess1,0007 B4 09 1movah,09h,0009 8D 16 0000 R 1leadx,mess1,000D CD 21 1int21h,promptmess2,000F B4 09 1movah,09h,0011 8D 16 0011 R 1leadx,mess2,0015 CD 21 1int21h,finish,0017 B8 4C00 1movax,4c00h,001A CD 21 1int21h,001Cbeginendp,001Cendbegin,用于连续产生完全相同或基本相同的一组代码。,7.2.1,重复伪操作,7.2.2,不定重复伪操作,重复伪操作,REPT,REPT,表达式,;重复块,ENDM,不定,重复伪操作,IRP,/,IRPC,IRP,哑元,,;重复块,ENDM,IRPC,哑元,字符串,;重复块,ENDM,7.2 重复汇编,例7.13:,x=0,REPT,10,x=x+1,DB x,ENDM,1 DB 1,1 DB 2,1 DB 3,1 DB 10,汇编后:,7.2.1 重复伪操作,例7.14:把字符A到Z的ASCII码填入数组TABLE,CHAR=A,TABLE LABEL BYTE,REPT,26,DB CHAR,CHAR=CHAR+1,ENDM,1 DB 41H,1 DB 42H,1 DB 43H,1 DB 5AH,汇编后:,例7.15:产生一组指令,将字数组TAB的内容入栈保存,;宏定义,PUSH_TAB,MACRO,K,PUSH TAB+k,ENDM,;宏调用,I=0,REPT,5,PUSH_TAB%I,I=I+2,ENDM,;宏展开,2 PUSH TAB+0,2 PUSH TAB+2,2 PUSH TAB+4,2 PUSH TAB+6,2 PUSH TAB+8,例7.16:建立ARRAY数组,.lall,ARRAY LABEL WORD,REPT,7,DW$+2,ENDM,DW ARRAY,ARRAY LABEL WORD,1 DW$+2,1 DW$+2,1 DW$+2,1 DW$+2,1 DW$+2,1 DW$+2,1 DW$+2,DW ARRAY,汇编后:,IRP,REG,PUSH REG,ENDM,1 PUSH AX,1 PUSH BX,1 PUSH CX,1 PUSH DX,汇编后:,例7.18:生成一组入栈指令,7.2.2 不定重复伪操作,例7.17:,IRP,x,DB x,ENDM,1 DB 1,1 DB 2,1 DB 10,汇编后:,汇编后:,array label byte,IRPC,K,12345,db NO.&K,ENDM,1 db NO.1,1 db NO.2,1 db NO.3,1 db NO.4,1 db NO.5,例7.19:生成存储字符串的汇编语句,汇编后:,IRPC,K,ABCD,push K&X,ENDM,1 pushAX,1 pushBX,1 pushCX,1 pushDX,例7.20:,根据条件把一段源程序包括在汇编语言程序内或者排除在外。,一般格式,条件伪操作中的表示条件,例,7.21,例,7.22,例,7.23,例,7.24,例,7.25,例,7.26,例,7.27,例,7.28,7.3 条件汇编,IF,自变量,;,为条件,;,自变量满足条件则汇编此块,ELSE,;,自变量不满足条件则汇编此块,ENDIF,一般格式,IF 表达式 ;表达式0,则汇编,IFE,表达式 ;表达式0,则汇编,IF1 ;在第一遍扫视期间满足条件,IF2 ;在第二遍扫视期间满足条件,IFDEF 符号 ;符号已定义,则汇编,IFNDEF 符号 ;符号未定义,则汇编,IFB ;自变量为空,则汇编,IFNB ;自变量不为空,则汇编,IFIDN ,;串1与串2相同,IFDIF ,;串1与串2不同,条件伪操作中的表示条件,例7.21:求最大值放入AX,宏定义,:,MAX,MACRO,K,A,B,C,LOCAL NEXT,OUT,MOV AX,A,IF,K-1,IF,K-2,CMP C,AX,JLE NEXT,MOV AX,C,ENDIF,NEXT:CMP B,AX,JLE OUT,MOV AX,B,ENDIF,OUT:,ENDM,1 MOV AX,P,1?0002:CMP Q,AX,1 JLE?0003,1 MOV AX,Q,1?0003:,宏展开,:,1 MOV AX,P,1?0001:,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:,宏调用,:,MAX 1,P,MAX 2,P,Q,MAX 3,P,Q,R,例7.22:宏指令BRANCH转向X,距离小于128字节的用JMP SHORT X,否则JMP NEAR PTR X。,宏定义:,BRANCHMACROX,IF($-X)LT 128,JMPSHORTX,ELSE,JMPNEAR PTRX,ENDIF,ENDM,宏调用:,BRANCHAA,宏展开,JMPSHORTAA或,JMPNEAR PTRAA,;宏展开,1 SAL AX,1,2 SAL AX,1,3 SAL AX,1,例7.23:宏定义的递归调用:POWER实现(X*2,N,),;宏定义,POWER,MACRO,X,N,SAL X,1,CNT=CNT+1,IF CNT-N,POWER,X,N,ENDIF,ENDM,;宏调用,CNT=0,POWER,AX,3,例7.24,在汇编程序中加入:,if1,includemacro.mac,endif,这样使include语句只在第一遍扫视期间出现,宏库的拷贝将不在汇编清单(LST文件)中出现,以便节省空间,mov ax,dividend,mov bx,divisor,sub cx,cx,comp:,cmp ax,bx,jb out,sub ax,bx,inc cx,jmp comp,out:,mov quotient,cx,endm,divide,macro,dividend,divisor,quotient,local comp,out,cnt=0,ifndef,dividend,cnt=1,endif,ifndef,divisor,cnt=1,endif,ifndef,quotient,cnt=1,endif,if,cnt,exitm,endif,例7.25:用减法实现除法,例7.26:宏指令GOTO L,X,REL,Y可以根据不同情况产生无条件转移指令或比较和条件转移指令。,宏定义:,G,OTO MACROL,X,REL,Y,IFB ,JMP L,ELSE,MOVAX,X,CMPAX,Y,J&RELL,ENDIF,ENDM,宏调用:,GOTO LOOP1,SUM,NZ,15,GOTO EXIT,宏展开:,MOVAX,SUM,1CMPAX,15,JNZLOOP1,1JMPEXIT,例7.27:宏定义DISP在给出参数时,在屏幕上显示该字符,不给出参数时,则显示空格,宏定义:,DISPMACROCHAR,IFB,MOVDL,ELSE,MOVDL,CHAR,ENDIF,MOVAH,02H,INT21H,ENDM,宏调用:,DISPA,DISP,DISPA,1MOVDL,A,MOVAH,,,02H,1 INT21H,DISP,1 MOVDL,,,1 MOVAH,,,02H,1 INT21H,汇编后:,movif,macro,tag,ifidn,rep movsb,exitm,endif,ifidn,rep movsw,exitm,endif,ifb,rep movsb,endif,endm,例7.28:宏定义,movif b,movif w,movif,movif a,宏调用:,
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        关注我们

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服