资源描述:
《高级汇编及串操作》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章高级汇编语言技术P1321.宏汇编2.重复汇编3.条件汇编1.宏汇编(1)引入的原因模块化程序设计中,使用子程序存在的一些缺点。如为转子及返回,保存及恢复寄存器和参数的传送所增加的开销,如所消耗的时间和所占用的存储空间。(2)宏定义宏----源程序中一段有独立功能的程序代码。只需定义一次,就可多次调用,调用时只需用一个宏指令语句。结构:macronameMACRO[dummyparameterlist]……ENDM哑元表(dummyparameterlist)给出形式参数,每个哑元之间用逗号隔开。(3)宏调用经
2、宏定义定义后的宏指令在源程序中的调用的操作。格式:macroname[actualparameterlist]实元表(actualparameterlist)中每一项为实元,之间用逗号隔开。(4)宏展开源程序在汇编时,汇编程序对每一个宏调用用宏定义体取代源程序中的宏指令名,并且用实元取代宏定义中的哑元。注:取代时,实元和哑元是一一对应的。每对应上的作“空”处理或不予考虑。例:用宏指令定义两个字操作数相乘,得到一个16位的第三个操作数作为结果。宏定义multiplyMACROop1,op2,resultpushdxpu
3、shaxmovax,op1imulop2movresult,axpopaxpopdxENDM宏调用……multiplycx,var,xyz[bx]……multiply240,bx,save……宏展开……pushdxpushaxmovax,cximulvarmovxyz[bx],axpopaxpopdx……pushdxpushaxmovax,240imulbxmovsave,axpopaxpopdx……优点:避免了子程序因为参数传递带来的麻烦。缺点:宏汇编可能占用较大的空间,代码较长的功能段往往使用子程序而不用宏汇编;
4、那些较短且变元较多的功能段则使用宏汇编。(5)宏定义中的参数A.宏定义可无变元例宏定义savemacropushaxpushbxpushcxendm宏调用saveB.变元可以是操作码例宏定义foomacrop1,p2,p3movax,p1p2p3endm宏调用fooword_var,inc,ax宏展开movax,word_varincaxC.变元是操作码的一部分,用&作为分隔符宏定义leapmacrocond,labj&condlabendm宏调用leapz,there…..leapnz,here……宏展开jzthe
5、re……jnzhere……D.变元是ASCII串宏定义messmacrolab,num,xyzlab&numdb‘hellowmr.&xyz’endm宏调用messmsg,1,taylor宏调用msg1db‘hellowmr.taylorE.变元使用%操作符,格式%expression宏定义msgmacrocount,stringmsg&countdbstringendmerrmsgmacrotextcntr=cntr+1msg%cntr,textendm宏调用….cntr=0errmsg‘syntaxerror’…
6、…errmsg‘invalidoperand’……宏调用……msg1db‘syntaxerror’……msg2db‘invalidoperand’(6)LOCAL伪操作原因宏定义体内允许使用标号,为防止多次调用引起展开后出现标号的多重定义,采用local伪操作。格式locallistoflocallabels例:宏定义absolmacrooperlocalnextcmpoper,0jgenextnegopernext:endm宏调用…..absolvar…..absolbx…..宏展开….cmpvar,0jge??0
7、000negvar??0000……cmpbx,0jge??0001negbx??0001……..(7)宏定义内使用宏条件:必须先定义后调用宏定义体内允许宏调用,宏使用和包含宏定义例宏定义DIFmacrox,ymovax,xsubax,yendmDIFSQRmacroopr1,opr2,resultpushdxpushaxdifopr1,opr2imulaxmovresult,axpopaxpopdxendm宏调用difsqrvar1,var2,var3宏展开pushdxpushaxmovax,var1subax,va
8、r2imulaxmovvar3,axpopaxpopdx(8)列表伪操作MASM提供.XALL,.LALL,.SALL.XALL为默认情况,指示清单只列出产生目标码的宏展开。.LALL列出包括注释在内的所有展开.SALL不列出任何展开信息(9)宏库的建立与调用宏库-----包含若干宏定义的文件称为宏库,通常扩展名为MAC或INC如:macro.