华南理工大学汇编原理课件05-1.ppt_第1页
华南理工大学汇编原理课件05-1.ppt_第2页
华南理工大学汇编原理课件05-1.ppt_第3页
华南理工大学汇编原理课件05-1.ppt_第4页
华南理工大学汇编原理课件05-1.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

Chapter5,BranchingandLooping分支和循环,Textbook:7ProgramLogicandControl,Outline,Theobjectiveofthischapteristodescribethestructuressuchas:ifthen,ifthenelse(分支结构程序设计)while,until,for(循环结构程序设计),Transfer(控制转移类指令),Instructionsthatcantransfercontroloutsidethenormalsequentialflow.BychangingtheoffsetvalueinIPorchangingthevalueofIPandCS.jmp,jcc,loop,控制转移类指令通过改变IP(或同时修改CS和IP)值,实现程序执行顺序的改变,Short,nearandfaraddress,Theassemblersupportsthreetypesofaddressesthataredistinguishbytheirdistancefromthecurrentlyexecutingaddress.,3typesofaddresses-short,Ashortaddress,limitedtoadistanceof-128(80H)to127(7FH)bytes.Ashortaddressisreachedbya1-byteoffset.,3typesofaddresses-near,Anearaddress,limitedtoadistanceof-32768(8000H)to32767(7FFFH)byteswithinthesamesegment.Anearaddressisreachedbya1-wordor2-wordoffset.,3typesofaddresses-far,Afaraddress,whichmaybewithinthesamesegmentatadistanceover32K,orinanothersegment.Afaraddressisreachedbyasegmentaddressandanoffset.,Transferinstructions(控制转移类指令),Unconditional(无条件转移指令)Jump(跳转)Procedure(过程)Interrupt(中断)Conditional(条件转移指令)Looping(循环指令),UnconditionalJumps8086无条件转移,5.1,JMPInstruction,Unconditional:theoperationtransferscontrolunderallcircumstances.Operation:(IP)EB03,Examples,Theassemblergeneratesonebytefortheoperation(EB)andonebytefortheoperand.,Examples,Jmps-jmp000B-EB03,JMPshort/near/faraddress,UnconditionaltransferinstructionforJMPshort/near/faraddress,JMPInstruction,ForwardjumpBackwardjump,jmpquit;退出程序quit:movax,4c00h;退出并返回dosint21h,Examples,forever:movax,0jmpforever;重复,Examples,TransfertypeofJMP,Directaddressingvs.IndirectaddressingIntra-segmenttransfervs.Inter-segmenttransfer,Intra-segmentvs.Inter-segment,实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、nearptr或farptr强制,Directaddressingvs.Indirectaddressing,Directaddressing(直接寻址方式)转移地址象立即数一样,直接包含在指令的机器代码中,就是直接寻址方式Indirectaddressing(间接寻址方式)转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式,用标号表达,用寄存器或存储器操作数表达,TransfertypeofJMP,4types,Types,Intra-segmentdirectaddressing段内转移直接寻址Intra-segmentindirectaddressing段内转移间接寻址Inter-segmentdirectaddressing段间转移直接寻址Inter-segmentIndirectaddressing段间转移间接寻址,Intra-segmentdirectaddressing,jmpagain;transferagain:deccx;label“again”jmpoutput;transferoutput:movresult,al;label“output”,Examples,实际为相对寻址,JMPlabel;IPIP+shift,(2)Intra-segmentindirectaddressing,jmpax;IPAXjmpwordptr2000h;IP2000h,Examples,JMPr16/m16;IPr16/m16,Inter-segmentdirectaddressing,jmpfarptrotherseg;othersegisinanothersegment,Examples,JMPfarptrlabel;IPlabel的偏移地址;CSlabel的段地址,Inter-segmentdirectaddressing,jmpfarptrs,Examples,Inter-segmentIndirectaddressing,movwordptrbx,0movwordptrbx+2,1500hJMPfarptrbx;转移到1500h:0,Examples,JMPfarptrmem;IPmem,CSmem+2,JMP指令:段内相对转移,JMP指令:段内寄存器间接转移,JMP指令:段间直接转移,JMP指令:段间间接转移,ConditionalJumps,CompareInstructions,andifStructure条件转移、比较指令和if结构,5.2,Conditionaljumpinstruction,Theprocessorsupportsavarietyofconditionaljumpinstructionsthattransfercontroldependingonsettingsintheflagregister.,DECCXJNZA20;testthesettingofZF,Examples,label:Jnnnshort-address;条件满足,发生转移:IPIP8位位移量;条件不满足,顺序执行,Conditionaljumpinstruction:CMP,cmpal,100jbbelow;ifal100,jumptobelowsubal,100;else(al100),alal-100below:,执行比较指令之后,可以根据标志判断两个数是否相等、大小关系等,Examples,Conditionaljumpinstruction,Forthe8086286,thedistanceforaconditionaljumpmustbeashort,within128to+127byte.Iftheoperationexceedsthelimit,theassemblerissuesamessage“relativejumpoutofrange”.The80386andlaterprocessorsallowreachinganyaddresswithin32K(=215).,label:Jnnnshort-address,JnnnInstructions,JnnninstructionstransfercontroldependingonsettingsintheFlagsregister.(Table)notaffectflags1.JumpsbasedonUnsigned(logical)data2.Jumpbasedonsigned(Arithmetic)data3.Specialarithmetictests1比较无符号数高低2比较有符号数大小3判断单个标志位状态及其他,JnnnInstructions,实际虽然指令只有16条,但却有30个助记符采用多个助记符,只是为了方便记忆和使用,JumpsbasedonUnsigned(logical)data(无符号数高低),Above-Equal-Below,JumpsbasedonUnsigned(logical)data,cmpax,bxjnbnext;jumpifaxbxxchgax,bxnext:.,Examples,JumpsbasedonSigned(Arithmetic)data(有符号数大小),Greater-Equal-Less,JumpsbasedonSigneddata,cmpax,bxjnlnext;jumptonextifaxbxxchgax,bxnext:.,Examples,Specialarithmetictests,JZ/JNZ,testal,80h;测试最高位jznext0;D70(ZF1),转移movah,0ffh;D71,顺序执行jmpdone;无条件转向next0:movah,0done:.testal,80h;测试最高位jnznext1;D71(ZF0),转移movah,0;D70,顺序执行jmpdone;无条件转向next1:movah,0ffhdone:.,Examples,JS/JNS,;计算|XY|(绝对值);X和Y为存放16位操作数的变量;结果存入变量resultmovax,Xsubax,Yjnsnonnegnegax;neg是求补指令nonneg:movresult,ax,Examples,JO/JNO,;计算XY;X和Y为存放16位操作数的变量;若溢出,则转移到overflow处理movax,Xsubax,Yjooverflow.;无溢出,结果正确overflow:.;有溢出处理,Examples,JP/JNP,;设字符的ASCII码在AL寄存器中;将字符加上奇校验位;在字符ASCII码中为“1”的个数已为奇数时;则令其最高位为“0”;否则令最高位为“1”andal,7fh;最高位置0,同时判断1的个数jnpnext;个数已为奇数,则转向nextoral,80h;否则,最高位置“1”next:.,Examples,JC/JNC,;记录BX中1的个数xoral,al;AL0,CF0again:testbx,0ffffh;等价于cmpbx,0jenextshlbx,1jncagainincaljmpagainnext:.;AL保存1的个数,Examples,记录BX中“1”的个数,xoral,al;AL0,CF0again:cmpbx,0jznextshlbx,1;也可使用shrbx,1adcal,0jmpagainnext:.;AL保存1的个数,Examples,法2,JCXZ,JCXZjustteststhecontentsoftheCXregisterforzero,notaffecta

温馨提示

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

评论

0/150

提交评论