在掌握基本的汇编语言程序设计方法之后-进一步学习如何提PPT课件_第1页
在掌握基本的汇编语言程序设计方法之后-进一步学习如何提PPT课件_第2页
在掌握基本的汇编语言程序设计方法之后-进一步学习如何提PPT课件_第3页
在掌握基本的汇编语言程序设计方法之后-进一步学习如何提PPT课件_第4页
在掌握基本的汇编语言程序设计方法之后-进一步学习如何提PPT课件_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-,1,在掌握基本的汇编语言程序设计方法之后,进一步学习如何提高编程效率的各种实用方法。,第5章高级汇编语言程序设计,宏汇编重复汇编条件汇编,-,2,宏汇编重复汇编条件汇编统称宏结构,宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法,宏具有宏名的一段汇编语句序列(宏定义时书写)宏指令这段汇编语句序列的缩写(宏调用时书写)宏展开宏指令处用这段宏代替的过程(宏汇编时实现)宏的参数功能强大,颇具特色配合宏,还有宏操作符和有关伪指令,5.1宏汇编,宏(Macro)是源程序中一段有独立功能的程序代码。它只需在源程序中定义一次,就可以多次调用它,调用时只需用一个宏指令语句就可以了。,宏定义是用一组伪操作来实现的其格式是:,宏名macro形参表宏定义体endm,其中macro和endm是一对伪操作,这对伪操作之间是宏定义体(一组有独立功能的程序代码)宏名给该宏定义的名称,调用时就使用宏名来调用该宏定义。宏名的第一个符号必须是字母,其后可以跟字母、数字和下划线字符。,-,5,MAINBEGINGMACRO;定义名为MAINBEGIN的宏,无参数MOVAX,DATA;宏定义体MOVDS,AXENDM;宏定义结束MAINENDMACRORETNUM;带有形参RETNUMMOVAL,RETNUM;宏定义中使用参数MOVAH,4CHINT21HENDM,-,6,MULTIPLYMACROOPR1,OPR2,RESULT;定义名具有三个参数的宏PUSHDX;宏定义体PUSHAXMOVAX,OPR1IMULOPR2MOVRESULT,AXPOPAXPOPDXENDM;宏定义结束,宏名实参表,宏调用经宏定义定义后的宏指令可以在源程序中调用,这种对宏指令的调用称为宏调用。其格式为:,宏调用的实质是在汇编过程中进行宏展开,-,8,例:START:MAINBEGIN;宏调用,建立DS内容MULTIPLY240,BX,SAVE;宏调用,显示字符串MAINEND0;宏调用,返回DOSENDSTART宏调用的实质是在汇编过程中进行宏展开,宏展开,在汇编时,用宏定义体的代码序列取代源程序中的宏指令名,而且用实际参数取代形式参数的过程。,宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代,而且在取代时,实参与形参是一一对应的。,-,10,START:1MOVAX,DATA;宏指令MAINBEGIN的宏展开1MOVDS,AX1PUSHDX;宏指令MULTIPLY的宏展开1PUSHAX1MOVAX,OPR11IMULOPR21MOVRESULT,AX1POPAX1POPDX1MOVAL,0;宏指令MAINEND0的宏展开1MOVAH,4CH1INT21HENDSTART,宏的参数:,宏的参数使用非常灵活,宏定义时,可以无参数,例如:MAINBEGIN可以带有一个参数,例如:MAINEND也可以具有多个参数;例如:MULTIPLY参数可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式;宏定义体可以是任何合法的汇编语句,既可以是硬指令序列,又可以是伪指令序列;,例:;宏定义SHLEXTMACROSHLOPRAND,SHLNUMPUSHCXMOVCL,SHLNUMSHLSHLOPRANDCLPOPCXENDM;宏指令SHLEXTAX,6;宏展开1PUSHCX1MOVCL,061SHLAX,CL1POPCX,;统一4条移位指令的宏指令(shl,shr,sal,sar)shiftmacrosoprand,snum,sopcodepushcxmovcl,snums;宏注释符,用于表示在宏定义中的注释。采用这个符号的注释,在宏展开时不出现满足,汇编分支语句体1分支语句体1ELSE;不满足,汇编分支语句体2分支语句体2ENDIF;条件汇编结束,-,43,自变量必须在汇编程序第一遍扫后就成为确定的数值.条件伪操作中的XX表示条件如下:IFexpression:汇编程序求出表达式的值,如此值不为0则满足条件.IFEexpression:如求出表达式的值为0则满足条件.IFDEFsymbol:如符号已在程序中定义,或者已用EXTRN伪操作说明该符号是在外部定义的,则满足条件.IFNDEFsymbol:如符号未定义或未通过EXTRN说明为外部符号则满足条件.,-,44,IFB:如自变量为空则满足条件IFNB:如自变量不为空则满足条件IFIDN,:如果字符串和字符串相同,则满足条件.IFDIF,:如果字符串和字符串不相同,则满足条件.上述IF和IFE的表达式中可以使用关系操作符EQ,NE,LT,LE,GT和GE。如:IF表达式1EQ表达式2等。条件伪操作可以用在宏定义体内,也可以用在宏定义体外,也允许嵌套任意次。,-,45,例:宏指令MAX把三个实参中的最大值放在AX中,而且使实参不同时产生不同的程序段.宏定义:MAXMACROK,A,B,CLOCALNEXT,OUTMOVAX,AIFK-1IFK-2CMPC,AXJLENEXTMOVAX,CENDIFNEXT:CMPB,AXJLEOUTMOVAX,BENDIFOUT:ENDM,-,46,宏调用:MAX1,PMAX2,P,QMAX3,P,Q,R宏展开:MAX1,P1MOVAX,P1?0001:MAX2,P,Q1MOVAX,P1?0002:CMPQ,AX1JLE?00031MOVAX,Q1?0003:,MAX3,P,Q,R1MOVAX,P1CMPR,AX1JLE?00041MOVAX,R1?0004:CMPQ,AX1JLE?00051MOVAX,Q1?0005:,-,47,宏定义:PDATAMACRONUMIFNUMLT100;如果num100,则汇编如下语句DBNUMDUP(?)ELSE;否则,汇编如下语句DB100DUP(?)ENDIFENDM宏调用:PDATA12PDATA102宏展开:DB12DUP(?)DB100DUP(?),例:宏指令PDATA根据实参不同时产生不同的程序段.,-,48,例:宏指令GOTOL,X,REL,Y(其中REL可以是Z,NZ,L,NL等)可以根据不同情况产生无条件转移指令或比较和条件转移指令.宏定义:GOTOMACROL,X,REL,YIFBJMPLELSEMOVAX,XCMPAX,YJ否则产生JMPNEARPTRX(X必须位于该转移指令之后,即低地址区)。宏定义:BRANCHMACROXIF($-X)LT128JMPSHORTXELSEJMPNEARPTRXENDIFENDM,-,53,宏调用:BRANCHX宏展开:如X与BRANCH指令间的距离小于128时产生1JMPSHORTX否则产生:1JMPNEARPTRX,宏汇编、重复汇编和条件汇编为源程序的编写提供了很多方便,灵活运用它们可以编写出非常良好的源程序来。汇编系统中有些以圆点起始的伪指令(如.startup、.exit等)实际上是一种宏结构。,宏结构的作用,dstringMACROstring;定义字符串db设置数据段地址movax,dssegmovds,axENDMdispmsgMACROmessagemovdx,offsetmessagemovah,09hint21hENDM,例:,mainendMACROretnum;返回DOS,可不带参数ifbmovah,4ch;没有参数elsemovax,4c00h+(retnumAND0ffh);有参数endifint21hENDM,.modelsmall.stack256.datamsg1equthisbytedstringmsg2equthisbytedstring.codestart:mainbegind

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论