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

下载本文档

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

文档简介

1、1,3.2.5控制转移指令(P130),专用于控制程序执行流程。通过对(CS)和(IP)的修改来改变程序执行的流程。,包括四种:,转移指令,过程调用指令,循环控制指令,中断指令,2,注意:,段内转移和段间转移,段内转移:目标地址在当前段内属性为NEAR,段间转移:目标地址不在当前段内属性为FAR,段间转移,转移指令修改(IP),转移指令修改(CS)和(IP),3,除中断指令,其它指令均不影响标志位。,直接转移和间接转移,直接转移:目标地址直接出现在指令中,间接转移:目标地址间接存储于寄存器或存储单元中,间接转移,4,1、转移指令,两种:,JMP无条件转移指令,Jcc条件转移指令,5,1)、JM

2、P无条件转移指令,五种格式:,段内直接短转移段内直接近转移段内间接转移段间直接远转移段间间接转移,6,(1)、段内直接短转移,格式:,JMPSHORT目的地址标号,;(IP)当前(IP)+disp8,7,注意:,双字节指令,机器码:E8KKKK为disp8,带符号数的补码,范围-128+127。,目的地址的偏移地址=当前(IP)+disp8=跳转指令地址+2+disp8,转移范围:从当前IP位置开始,向前128(减80H)个字节,向后127(加7FH)个字节。,例:,JMPSHORTNEXT,向前到(1000H)-80H=0F80H向后到(1000H)+7FH=107FH,NEXT所指地址范围

3、:,E8H50H,指令机器码:,10,8位位移量D8的范围在(-128127)之间,否则出错。,11,实际使用时,在汇编指令中出现的直接是目的地址的标号,对于编程者,关心的是这个标号所指位置是否超出了本指令的跳转范围。,12,(2)、段内直接近转移,格式:,JMPNEARPTR目的地址标号,;(IP)当前(IP)+disp16,13,注意:,三字节指令,机器码:E8KKJJJJKK为disp16,带符号数补码,范围-32768+32767,目的地址的偏移地址=当前(IP)+disp16=跳转指令地址+3+disp16,14,转移范围:从当前IP位置开始,向前32768(减8000H)个字节,向

4、后32767(加7FFFH)个字节。但不超出本段。,15,(3)、段内间接转移,格式:,JMPWORDPTROPR,;(IP)(EA)或(IP)(reg16),OPR为16位寄存器、存储器,16,例:,JMPAXJMPWORDPTRBPDI,转移范围:当前段,17,(4)、段间直接转移,格式:,JMPFARPTR目的地址标号,;(IP)目的地址标号的偏移地址(CS)目的地址标号的段地址,18,JMPFARPTRNEXTNEXT:MOVAL,SI,例:,19,转移范围:整个存储器1M空间,20,(5)、段间间接转移,格式:,JMPDWORDPTROPR,;(IP)OPR低16位(CS)OPR高1

5、6位,21,例:,JMPDWORDPTRBPDI,转移范围:整个存储器1M空间,22,2、条件转移指令,两种:,比较转移指令,判位转移指令,均采用相对短转移,即:(IP)当前(IP)+disp8,转移范围:从当前(IP)所指单元开始-128+127。,23,1)、比较转移指令,根据前一条比较指令结果(对标志位的影响)作测试条件。决定是否转移。,分为:无符号数比较转移指令带符号数比较转移指令。,无符号数比较的结果作为转移条件(P134),两个带符号数比较的结果作为转移条件,25,例:数据段RESULT开始的30个单元中存放着某班30个同学的某门课程的考试成绩。要求统计成绩在80分以上的学生人数,

6、将其存放在BL中。,26,MOVAL,80LEADI,RESULTMOVCX,30MOVBL,0AGN:JMPAL,DIJANEXTINCBL,NEXT:INCDIDECCXJNZAGNHLT;停机,27,2)、判位转移指令,根据当前某标志位的状态来决定是否进行转移,28,3)、判CX转移指令,既是一条转移指令,也可用来控制循环,但循环控制条件与LOOP相反。,29,2、循环控制指令,三种:,LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ,30,格式:,LOOPxx符号地址,执行操作:,(CX)(CX)-1此操作不影响标志检查转移条件xx,满足转向目标地址去执行;不满足执行LOO

7、Pxx后一条指令,31,只允许段内直接短转移方式,跳转范围-128127,都用CX作为循环计数器,循环指令说明:LOOP退出循环条件是(CX)=0LOOPZ和LOOPNZ提供了提前结束循环的可能。,在串中查找字符,查到了,退出,用LOOPNZ,不相等时继续查找。比较两串时,当有字符不等,退出,两字符串不等。可用LOOPZ,当相等时继续比较。执行完LOOPNZ或LOOPZ后,判断ZF的值对查找字符,ZF=1,说明找到;否则没有找到。对串比较,ZF=1,说明两串相等;否则不等。,LOOP,相当于:DECCXJNZ目的地址标号,例:在数据段DATA开始的30个单元中存放着某班30位同学的某门考试成绩

8、,求总分和平均成绩,结果分别保存在DX,AL中。,35,MOVDX,0LEASI,DATAMOVCX,30NEXT:ADDDL,BYTEPTRSIADCDH,0INCSILOOPNEXTMOVCL,30MOVAX,DXDIVCL,例:在string字符串中查找空格字符,串长度为N。,MOVCX,NMOVAX,SEGstringMOVDS,AXLEABX,stringMOVAL,20Hnext:CMPAL,BXJZfindINCBXDECCXJNZnext未找到处理JMPexitfind:找到处理exit:结束出口,用条件转移:JZ,MOVCX,NMOVAX,SEGstringMOVDS,AXL

9、EABX,stringMOVAL,20Hnext:CMPAL,BXPUSHFINCBXPOPFLOOPNZnextJZfind未找到处理JMPexitfind:找到处理exit:结束出口,用循环指令:LOOPNZ,39,思考:去掉指令JMPexit,程序执行结果会怎样?PUSHF、POPF可否去掉?若要去掉,程序如何修改?执行完LOOPNZ后,可否根据CX=0来判断查找结果?CX=0,即说明没找到,对吗?,40,3、过程(子程序)调用指令,子程序具有独立功能的独立程序模块。,子程序(过程)定义格式:子程序名PROC类型子程序名ENDP,子程序调用和返回调用:CALL返回:RET,41,过程与调

10、用语句间的位置,有两类:NEAR类:调用指令与过程在同一个段中FAR类:调用指令与过程不在同一个段中,子程序调用和返回调用:CALL返回:RET,42,1)、CALL调用,CALL调用指令有4种:段内直接调用段间直接调用段内间接调用段间间接调用,CALL指令出现在主程序中,43,(1)、段内直接调用,格式:,;(SP)(SP)-2,(SP)+1,(SP)(IP);(IP)(IP)+D16,CALL子程序名,第一步,断点入栈保护,第二步,装入子程序入口地址,D16机器指令中的位移量,目的地址和当前(IP)地址之差,例:NEAR类型过程codeSEGMENT;code段CALLsubp;D16=s

11、ubp-XXXXXX:YYYsubpPROCNEAR;过程定义RET;返回subpENDPcodeENDS,45,(2)、段内间接调用:,格式:,;(SP)(SP)-2,(SP)+1,(SP)(IP);(IP)OPR的值,CALLWORDPTROPR,第一步,断点入栈保护,第二步,装入子程序入口地址(操作数的值),OPR为16位寄存器,或存储器,例:,CALLWORDPTRSICALLBX,47,(3)、段间直接调用,格式:,(SP)(SP)-2(SP)+1,(SP)(CS)(SP)(SP)-2(SP)+1,(SP)(IP)(IP)入口偏移地址(指令第2,3字节)(CS)DST段地址(指令中第

12、4,5字节),CALLFARPTR子程序名,例:CSEG1SEGMENTCALLFARPTRsubp;处的CS:IP入栈;转subp:CSEG1ENDSCSEG2SEGMENTsubpPROCRETsubpENDPCSEG2ENDS,49,(4)、段间间接调用:,格式:,(SP)(SP)-2((SP+1),(SP))(CS)(SP)(SP)-2((SP+1),(SP))(IP)(IP)(EA)(CS)(EA+2),CALLDWORDPTROPR,例:,CALLDWORDPTRSI,51,2)、RET返回,RET返回指令有4种:段内返回段间返回段内带立即数返回段间带立即数返回,放在子程序的末尾子

13、程序执行完后返回调用程序继续执行。,52,(1)、段内返回:,格式:RET;机器码:C3H或者C2H执行操作:(IP)(SP)+1,(SP)(SP)(SP)+2,53,(2)、段间返回:,格式:RET;机器码:CBH或CAH执行操作:(IP)(SP)+1,(SP)(SP)(SP)+2(CS)(SP)+1,(SP)(SP)(SP)+2,54,段内带立即数返回格式:RETEXP;执行操作:(IP)(SP)+1,(SP)(SP)(SP)+2(SP)(SP)+D16EXP是一个表达式计算出来的常数成为机器指令中位移量D16,修改堆栈指针。,55,4、中断和中断返回指令,以后学习,56,2、过程(子程序

14、)调用指令子程序程序中具有独立功能的部分编写成独立程序模块。子程序(过程)定义格式:符号名PROC类型符号名ENDP子程序调用和返回指令:CALLRET(RETURN)过程有两种类型:按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中CALL指令和RET指令都不影响条件码。,分界,57,段内直接调用格式:CALLDST;(SP)(SP)-2,(SP)+1,(SP)(IP);(IP)(IP)+D16DST给出转向地址(子程序的入口地址)。D16机器指令中的位移量(转向地址和返回地址之差)。位移量为D16范围-32768+32

15、767H,占有两个字节。,58,(1)、CALL(Callaprocedure)调用CALL调用指令调用地址由指令给出CALL调用指令有4种:段内直接调用段间直接调用段内间接调用段间间接调用,59,段内直接调用格式:CALLDST;(SP)(SP)-2,(SP)+1,(SP)(IP);(IP)(IP)+D16DST给出转向地址(子程序的入口地址)。D16机器指令中的位移量(转向地址和返回地址之差)。位移量为D16范围-32768+32767H,占有两个字节。,60,工作过程如下:例:NEAR类型过程codeSEGMENT;code段CALLsubp;调用指令YYY入栈,D16=subp-yyy

16、XXX:YYYsubpPROCNEAR;过程定义RET;返回subpENDPcodeENDS,61,例:两个数据变量X与Y相乘子程序和调用程序在同一个程序模块中,子程序可以直接访问模块中的变量。DATASGSEGMENTXDW100YDW10DATASGENDSCODESGSEGMENTMAINPROCFARASSUMECS:CODESG,DS:DATASGSTART:CALLsubpRETMAINENDP,subpPROCNEARMOVAX,XMOVBX,YMULBXRETsubpENDCODESGENDSENDSTART,62,段内间接调用:格式:CALLDST;WORDPTROPROPR

17、为16位寄存器,或存储器(除立即数以外的任何一种寻址方式)执行操作:(SP)(SP)-2(SP)+1,(SP)(IP)(IP)(EA)EA由DST寻址方式所确定的有效地址。,63,段间直接调用:格式:CALLFARPTRDST;执行操作:(SP)(SP)-2(SP)+1,(SP)(CS)(SP)(SP)-2(SP)+1,(SP)(IP)(IP)DST偏移地址(指令中第2,3字节)(CS)DST段地址(指令中第4,5字节),64,例:CSEG1SEGMENTCALLFARPTRsubp;处的CS:IP入栈转subp:CSEG1ENDSCSEG2SEGMENTsubpPROCRETsubpENDP

18、CSEG2ENDS,65,段间间接调用:格式:CALLDWORDPTRDST执行操作:(SP)(SP)-2(SP)+1,(SP)(CS)(SP)(SP)-2(SP)+1,(SP)(IP)(IP)(EA)(CS)(EA)+2转子程序入口EA由DST的寻址方式确定的有效地址。,66,(2)、RET(Returefromprocedure)返回RET返回指令放在子程序的末尾使子程序在功能完成后返回调用程序继续执行。*为能准确返回,返回指令类型与调用指令类型相对应。RET返回指令有4种:段内返回段间返回段内带立即数返回段间带立即数返回在子程序调用时,返回地址入栈返回时:将返回地址出栈(IP)(段内或段间)。(CS)(段间)。,67,段内返回:格式:RET;机器码:C3H或者C2H执行操作:(IP)(SP)+1,(SP)(SP)(SP)+2段间返回:格式:RET;机器码:CBH或CAH执行操作:(IP)(SP)+1,(SP)(SP)(SP)+2(CS)(SP)+1,(SP)(SP)(SP)+2,68,段内带立即数返回格式:RETEXP;执

温馨提示

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

评论

0/150

提交评论