《entiun之控制转移》PPT课件_第1页
《entiun之控制转移》PPT课件_第2页
《entiun之控制转移》PPT课件_第3页
《entiun之控制转移》PPT课件_第4页
《entiun之控制转移》PPT课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1,五控制控制转移指令,控制转移指令分为:转移指令子程序调用和返回指令循环控制指令中断指令处理器控制指令,2,程序是指令的集合指令代码在内存中顺序存放,但指令的执行不一定是顺序的在Pentiun系列中,指令的地址由CS中的选择子和EIP两个寄存器决定。CS和EIP两寄存器的内容决定了程序的流程,程序顺序执行和非顺序执行的概念,1顺序执行CPU取来一条指令后,自动将IP的值加上该指令的字节数,使IP顺序指向下一条指令,CPU取来紧接着的指令执行。(此时IP的变化由CPU内部的硬件自动完成),3,通过控制转移指令改变CS和IP的值,使程序产生分支、调用结构。例:比较(AX)、(BX)的大小,将大数存于(max)单元。CMPAX,BXJGgreatXCHGAX,BXgreat:MOVmax,AX,2非顺序执行,4,转移指令的实质:改变IP(或CS)的内容。所有转移指令不会影响标志位。分为无条件转移和条件转移两种。,1.转移指令,关于转移指令和调用指令的寻址,5,(1)无条件转移指令-JMP本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。根据设置CS、IP的方法,JMP指令分成4种情况。段内直接转移:指令中给出的8/16位的位移量加到IP。CS保持不变。段内间接转移:REG/MEM中的16位偏移地址送IP。CS保持不变。段间直接转移指令中给出的16位的段和16位的偏移地址送到CS和IP。段间间接转移MEM中给出的16位的段和16位的偏移地址送到CS和IP。,6,转移的目标地址由指令直接给出。段内转移,故转移后CS内容保持不变,只改变IP的值。汇编语言中格式位移量转移范围JMP(SHORT)OPRD8位-128+127JMP(NEARPTR)OPRD16位-32768+32767OPR-在汇编语言中使用符号地址。在机器语言中是一个相对于当前IP的位移量:例:JMPLPI;转向LPIJMPBBB;转向BBB,段内直接转移,7,JMPNEXT指令本身占有两个字节操作码占一个字节;8位位移量占有一个字节,=1050H-1000H,源程序:,条件转移指令:JMP,next,.,.,next:,MOVAL,03H,E9,50H,.,.,B0,03H,.,.,3000:1000H,3000:1050H,(IP),当前,D,8,=50H,(IP)=(IP)当前+D8,内存,例:代码段内有一条无条件转移指令,执行操作:(IP)(IP)当前+D8,qqq:,8,JMPSHORTOPR8位位移量D8的范围在(-128127)之间,否则出错JMPNEARPTROPR指令本身占有三个字节,位移量为D16,占有两个字节,范围:-32768+32767H。可以转移到段内的任一位置。,9,段内间接转移转移的目标地址由寄存器或存储单元的内容给出。例1:JMPSI若指令执行前(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处执行。,10,例2:JMPBX+DI设指令执行前:(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H;则指令执行后:(IP)=2350H在汇编语言中,段内间接寻址通常写成:JMPWORDPTRBX+DI表示所取得的目标地址是一个字。(只改变IP),11,段间直接转移在指令中直接给出要转移到的目的段地址和偏移地址。例:JMP2000:1000H执行时,(IP)1000H,(CS)2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FARPTR。例:JMPFARPTRfar_label其中的far_label为远类型的标号。,12,例:C1SEGMENTJMPFARPTRnext_progC1ENDSC2SEGMINTnext_prog:C2ENDS,FAR远属性标号,标号与控制转移指令不在同一代码段中。,13,转移的目的地址(段和偏移)在两个相邻的字存储单元中。例如:JMPDWORDPTRSI设指令执行前:(DS)=4000H,(SI)=1212H,(41212H)=1000H,(41214H)=4A00H则指令执行后:(IP)=1000H,(CS)=4A00H于是转到4B000H处开始执行指令。例中的DWORDPTR表示转移地址是一个双字。,段间间接转移,14,4000,1212,+),41212,DS,SI,00,10,00,4A,41212412134121441215,1000,4A00,IP,CS,段间间接转移操作示意图,11111111,11101100,JMPDWORDPTRSI的机器码,DS:SI,15,条件转移指令根据标志位的状态或比较的结果来决定是否进行分支转移。格式:JXXlabel;xx为条件名称缩写8086指令的转移范围为-128+127字节。Pentiun最大到-32768+32767,(2)条件转移指令-JXX,条件转移指令可实现程序的条件分支。,16,以单个状态标志作为转移条件助记符转移条件,以CX的值为0作为转移条件,按转移条件不同,条件转移指令可以分为四大类:,17,以两个无符号数比较的结果作为转移条件,以两个带符号数比较的结果作为转移条件,18,2条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,,注意几点:,1所有条件转移指令只能用段内直接寻址方式都是相对转移,范围(-128+127)或(-32768+32767)。,3条件转移指令不影响标志位,19,条件转移指令应用举例:例1:以十六进制数形式显示BX中的内容。MOVBX,1234HMOVCH,4;CH做循环计数器ROT:MOVCL,4;CL做移位计数器ROLBX,CL;将最高4位移到低4位MOVAL,BLANDAL,0FH;取出低4位ADDAL,30H;转换为ASCII码CMPAL,39H;与9比较JBEDISP;若(AL)9,则转显示ADDAL,7;若(AL)9,再加7转为A-FDISP:MOVDL,AL;(DL)字符MOVAH,2INT21H;显示输出DECCH;4个十六进制数显示完否?JNZROT;没有,循环MOVDL,48H;HMOVAH,2INT21H;最后显示H,20,ASCII码,美国标准信息交换代码,21,例2:在8000H开始的长度为1000字节的字符串中查找S,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。MOVDI,8000HMOVCX,1000MOVAL,SMOVADDR,0FFFFHGOON:SCASBLOOPNZGOONJNZDONEDECDIMOVADDR,DIDONE:HLT,22,2.子程序调用和返回指令,特点调用子程序时,IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(CS)。子程序执行结束后一般均要返回调用程序。一次定义,多次调用;可带参数调用,以完成不同的功能。,子程序(过程)一段具有特定功能的,供其它程序调用的公用程序,两条相关指令:子程序调用指令CALL子程序返回指令RET,优点程序代码短,结构清晰,便于编程、调试、修改和阅读。,23,NEAR:调用指令CALL与过程在同一个代码段中,过程程序中具有独立功能的部分编写成独立程序模块。,过程定义格式:过程名PROC类型RET过程名ENDP,CALL指令和RET指令都不影响条件码。,过程有两种类型:按过程与调用语句间的位置,FAR:调用指令CALL与过程不在同一个代码段中,24,例:NEAR类型过程code1SEGMENT;code段CALLsubp;调用指令YYY:MOVBX,AXsubpPROCNEAR;过程定义RET;返回subpENDPcode1ENDS,25,一般格式:CALLsub;sub为子程序的入口子程序调用有两类。段内调用段间调用段内直接调用子程序的偏移地址直接由CALL指令给出。格式:CALLNEARPTRDSTCALL执行时:首先将当前IP内容(返回地址)压栈,然后把机器指令中给出的位移量加到IP上,转到子程序的入口处去执行。注:返回地址-CALL指令的下一条指令的首地址。,(1)调用指令CALL,26,例:段内直接调用code1SEGMENT;code段CALLsubp;调用指令YYY:MOVBX,AXsubpPROCNEAR;过程定义RET;返回subpENDPcode1ENDS问题:本例中的返回地址?,27,子程序的偏移地址在寄存器或存储器中。格式:CALLmem16/reg16CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP。例:CALLAX;调用地址由AX给出CALLWORDPTRSI;调用地址由存储器给出,段内间接调用,28,IPHIPL,代码段,数据段,对于CALLWORDPTRSI这条指令若:(DS)=8000H,(SI)=1200H则指令操作图示如下。,81200H,81201H,29,子程序的段地址和偏移地址直接由CALL指令给出。格式:CALLFARPTRDST;执行操作:SP(SP)-2(SP)-1,(SP)-2)(CS);返回地址的段地址入栈SP(SP)-2(SP)-1,(SP)-2)(IP);返回地址的偏移地址入栈(IP)DST偏移地址(CS)DST段地址,段间直接调用,30,CSEG1SEGMENTCALLFARPTRPPP;AAA处的CS:IP入栈,转PPPAAA:CSEG1ENDSCSEG2SEGMENTPPPPROCFARRETPPPENDPCSEG2ENDS,段间直接调用举例,31,子程序的段和偏移地址为存储器的连续4个单元中的内容。格式:CALLmem32指令的操作为:SP(SP)-2(SP)+1,(SP)(CS);返回地址的段地址入栈SP(SP)-2(SP)+1,(SP)(IP);返回地址的偏移地址入栈CS(mem32+2)IP(mem32)例:CALLDWORDPTRDI调用地址在DI,DI+1,DI+2,DI+3四个存储单元中。低字内容为偏移地址,高字内容为段地址。,段间间接调用,32,CALL,代码段,数据段,IPHIPL,CSHCSL,DI,DI+1,DI+2,DI+3,段间间接调用示意图,CALLDWORDPTRDI,33,段内返回指令RET的操作为:IP(SP)+1,(SP);栈顶内容弹出到IPSP(SP)+2段间返回指令RET的操作为:IP(SP)+1,(SP);栈顶内容弹出到IPSP(SP)+2CS(SP)+1,(SP);栈顶内容弹出到CSSP(SP)+2带立即数返回指令:RETN;N为偶数执行操作:从栈顶弹出返回地址后,再使SP的值加N。例:RET4,(2)返回指令RET(子程序中的最后一条指令),34,例如:RETN堆栈使用情况:CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXPUSHBXPUSHCXCALLDELCHARQQQ:MOVAH,4CHINT21HMAINENDPDELCHARPROCNEARRET4DELCHARENDPCODEENDSENDSTART,(BX),(SP),(CX),QQQ的偏移地址,PUSHBX,PUSHCX,CALLDELCHAR,RET4,RET4堆栈使用情况:,35,3.循环控制指令,用在循环程序中以确定是否要继续循环。循环次数通常置于CX中。转移的目标应在距离本指令-128+127或-32768+32767的范围之内。循环控制指令不影响标志位。,36,(2)LOOPZ(LOOPE)格式:LOOPZlabel操作:(CX)-1CX;若(CX)0ZF=1,则转至label处执行;否则退出循环,执行LOOP后面的指令。,(1)LOOP格式:LOOPlabel操作:(CX)-1CX;若(CX)0,则转至label处执行;否则退出循环,执行LOOP后面的指令。LOOP指令与下面的指令段等价:DECCXJNZlabel,37,(3)LOOPNZ(LOOPNE)格式:LOOPNZlabel操作:(CX)-1CX;若(CX)0ZF=0,则转至label处执行;否则退出循环,执行LOOP后面的指令。循环指令的例子见下页。,38,例1:给1A000H开始的256个内存单元均减去1,若发现某个单元减为0则立即退出循环,其后的单元不再减1。MOVAX,1A00HMOVDS,AXMOVDI,0MOVCX,256GOON:DECBYTEPTRDIINCDICMPBYTEPTRDI-1,0LOOPNZGOONHLT,39,例2:在40个元素构成的数组中,寻找第一个非零元素MOVCX,40;MOVSI,0FFH;NEXT:INCSI;CMPBYTEPTRSI,0;LOOPZNEXT;(CX)0ZF=1当前元素为0且未找完时,继续寻找JNZOKK;退出循环有两种情况:ZF=0,找到非零元素或CX=0:整个数组已找完,未找到非零元素,此时ZF=1CALLDISPLAY;未找到非零元素的处理RETOKK:.;找到非0元素的处理RET,40,4.中断指令,CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫软中断。中断指令共有三条:(1)INTn执行类型n的中断服务程序,N=0255(2)INTO执行溢出中断的中断服务程序(3)IRET/IRETD从中断服务程序返回调用程序,41,(1)INTn;n=0255,为中断类型号本指令的操作步骤为:(SP)-1,(SP)-2)(FLAGS),SP(SP)-2保护标志寄存器的内容IF0,TF0中断服务程序中禁止外部INTR中断和单步中断(SP)-1,(SP)-2)(CS),SP(SP)-2,CS(n*4+2)中断服务程序的段地址送入CS。n*4为向量地址。该向量地址中的内容即为中断服务程序入口地址。(SP)-1,(SP)-2)(IP),SP(SP)-2,IP(n*4)中断服务程序的偏移地址送IP。INT指令只影响IF和TF,对其余标志位无影响。INT指令可用于调用系统服务程序,如INT21H,42,(2)溢出中断INTOINTO检查溢出标志OF,如果OF=1,则启动一个类型4的中断过程;如果OF=0,不做任何操作。通常INTO指令安排在有符号数算术运算指令后面。如IMULDXINTO;若溢出,则启动INT4,否则继续MOVRESULT,AXMOVRESULT+2,DX,43

温馨提示

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

评论

0/150

提交评论