微机原理与接口技术3-9控制转移指令解析

上传人:最**** 文档编号:117097033 上传时间:2019-11-18 格式:PPT 页数:28 大小:497KB
返回 下载 相关 举报
微机原理与接口技术3-9控制转移指令解析_第1页
第1页 / 共28页
微机原理与接口技术3-9控制转移指令解析_第2页
第2页 / 共28页
微机原理与接口技术3-9控制转移指令解析_第3页
第3页 / 共28页
微机原理与接口技术3-9控制转移指令解析_第4页
第4页 / 共28页
微机原理与接口技术3-9控制转移指令解析_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《微机原理与接口技术3-9控制转移指令解析》由会员分享,可在线阅读,更多相关《微机原理与接口技术3-9控制转移指令解析(28页珍藏版)》请在金锄头文库上搜索。

1、四四控制转移指令控制转移指令转移类指令转移类指令循环控制指令循环控制指令过程调用过程调用和返回和返回指令指令中断中断控制类控制类指令指令11转移指令转移指令1)无条件转移指令无条件转移到目标地址,执行新的指令。2)有条件转移指令在具备一定条件的情况下转移到目标地址。转移指令的实质:改变IP(或CS)的内容。所有转移指令不会影响标志位。分为无条件转移和条件转移两种。(11)无条件转移指令)无条件转移指令JMPJMP段内直接转移(相对转移)转移的目标地址由指令直接给出。指令中直接给出的目标地址实际上是一个相对于IP的位移量。位移量转移范围汇编语言中格式8位-128+127JMPSHORTLABLE

2、16位-32768+32767JMPNEARPTRLABLE例:JMP0120H;直接转向0120HJMPSHORTLPI;转向LPIJMPNEARPTRBBB;转向BBB由于是段内转移故转移后CSCS内容保持不变内容保持不变转移的目标地址(偏移量)由寄存器或存储单元的内容给出。例:JMPSI若指令执行前(SI)=1200H,则指令执行后,(IP)=1200H于是转向代码段的偏移地址1200H处执行。段内间接转移注意:目标地址以段内偏移的形式给出,而不是相对于IP的位移量,所以它是一个16位的操作数。例:JMPBX+DI设指令执行前:(DS)=3000H(BX)=1300H(DI)=1200H

3、(32500H)=50H,(32501H)=23H;则指令执行后:(IP)=2350H在汇编语言中段内间接寻址通常写成:JMPWORDPTRBX+DI表示所取得的目标地址是一个字一个字(16(16位偏移地址位偏移地址)。段内间接转移在指令中直接给出要转移到的目的段地址段地址和偏移偏移地址地址。例:JMP2000:1000H执行时(IP)1000H(CS)2000H段间直接转移注注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FARPTR。例:JMPFARPTRfar_label其中的far_label为远类型的标号。段间间接转移转移的目的地址(段和偏移)在两个相邻的字存储单元

4、中。例如:JMPDWORDPTRSI设指令执行前:(DS)=4000H(SI)=1212H(41212H)=1000H(41214H)=4A00H则指令执行后:(IP)=1000H(CS)=4A00H。(22)条件转移指令)条件转移指令JccJcc格式为:JccLabel;Label是转移的目标地址Jcc指令包括下列3类:(1)测试单个标志位。(2)用于带符号数比较。(3)用于无符号数比较。条件转移指令只能是段内直接转移,且指令的转移范围为指令所在位置的-128+127字节。JC;CF=1则转移JNC;CF=0则转移JEJZ;结果为零(ZF=1)则转移JNZJNE;结果不为零(ZF=0)则转移

5、JPJPE;奇偶标志PF=1(偶)则转移JNPJPO;奇偶标志PF=0(奇)则转移JS;符号标志SF=1则转移JNS;符号标志SF=0则转移JO;溢出标志OF=1则转移JNO;溢出标志OF=0则转移l根据CX内容来决定是否转移的转移指令JCXZlabel;若(CX)=0则转移到label处开始执行。i根据单个标志位设置的条件转移指令ii判断无符号数的大小JAJNBE;高于不低于且不等于,则转移(AB)条件为:CF=0且ZF=0JAEJNB;高于或等于不低于,则转移(AB)条件为:CF=0或ZF=1JBJNAE;低于不高于且不等于,则转移(AB)条件为:CF=1且ZF=0JBEJNA;低于或等于

6、不高于,则转移(AB)条件为:CF=1或ZF=1iii判断有符号数的大小JGJNLE;大于不小于且不等于,则转移(AB)条件为:(SFOF=0)且ZF=0JGEJNL;大于或等于不小于,则转移(AB)条件为:(SFOF=0)或ZF=1JLJNGE;小于不大于且不等于,则转移(AB)条件为:(SFOF=1)且ZF=0JLEJNG;小于或等于不大于,则转移(AB)条件为:(SFOF=1)或ZF=1例:将AX与BX中两无符号数的较大数存WMAX单元。CMPAXBX;比较AX和BXJAEnext;若AXBX,转移XCHGAXBX;AXBX,交换next:MOVWMAXAX;存较大数如果AX和BX存放的

7、是有符号数,则条件转移指令应采用JGE指令例:地址为例:地址为DATADATA的存储单元中存放着一个带符号的存储单元中存放着一个带符号的的1616位数,若该数为正,则位数,若该数为正,则CX=1CX=1;若该数为负,;若该数为负,则则CX=FFFFHCX=FFFFH;若该数为;若该数为00,则,则CX=0CX=0。MOVAX,DATAANDAXAXJEZEROJNSPLUSMOVCX0FFFFHJMPDONEZERO:MOVCX0JMPDONEPLUS:MOVCX,1DONE:HLT22循环循环控制指令控制指令用在循环程序中以确定是否要继续循环。循环次数通常置于CX中。转移的目标应在距离本指令

8、-128+127的范围之内。循环控制指令不影响标志位。格式:LOOPlabel操作:(CX)-1CX;若(CX)0则转至label处执行;否则退出循环执行LOOP后面的指令。LOOP指令与下面的指令段等价:DECCXJNZlabel(11)循环转移指令)循环转移指令LOOPLOOP(2)LOOPZ(LOOPE)格式:LOOPZlabel操作:(CX)-1CX;若(CX)0且ZF=1则转至label处继续循环;否则退出循环执行LOOP后面的指令。(3)LOOPNZ(LOOPNE)格式:LOOPNZlabel操作:(CX)-1CX;若(CX)0且ZF=0则转至label处继续循环;否则退出循环执行

9、LOOP后面的指令。33过程调用和返回指令过程调用和返回指令过程(子程序):一段具有特定功能的,供其它程序调用的公用程序。特点特点调用子程序时,IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(CS)。子程序执行结束后一般均要返回调用程序。一次定义,可多次调用;可带参数调用,以完成不同的功能。(11)调用指令)调用指令CALLCALL一般格式:CALLsubsub为子程序的入口。根据子程序入口的寻址方式,子程序调用有四类。段内直接调用子程序的偏移地址直接由CALL指令给出。格式:CALLNEAR_PROCCALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加

10、到IP上。段内间接调用子程序的偏移地址在寄存器或存储器中。格式:CALLmem16reg16CALL执行时,它首先将IP内容压栈,然后把指定的寄存器存储器的内容送入IP。例:CALLAX调用地址由AX给出CALLWORDPTRSI调用地址由存储器给出.例:对于例:对于CALLWORDPTRSICALLWORDPTRSI这条指令这条指令若:若:(DS)DS)=8000H8000H,(SI)(SI)=1200H1200H则指令操作图示如下。CALLIPHIPL代码段代码段数据段数据段81200H81201H段间直接调用子程序的段地址和偏移地址直接由CALL指令给出。格式:CALLFAR_PROCF

11、AR_PROC为远过程的地址指令的操作:(SP)-1(SP)-2)(CS)原CS压栈SP(SP)-2CS新段地址(SP)-1(SP)-2)(IP)原IP压栈SP(SP)-2IP新偏移地址例:CALL2000H:1000H段间间接调用子程序的段地址和偏移地址为存储器的连续4个单元中的内容。格式:格式:CALLmem32指令的操作为:(SP)-1(SP)-2)(CS)原CS压栈SP(SP)-2CS(mem32+2)(SP)-1(SP)-2)(IP)原IP压栈SP(SP)-2IP(mem32)例:CALLDWORDPTRDI调用地址在DI,DI+1,DI+2,DI+3四个存储单元中。低字内容为偏移地

12、址高字内容为段地址。CALL代码段代码段数据段数据段IPHIPLCSHCSLDIDI+1DI+2DI+3CALLDWORDPTRCALLDWORDPTRDIDI(22)返回指令)返回指令RETRET段内返回指令RET的操作为:IP(SP)+1(SP)栈顶内容弹出到IPSP(SP)+2段间返回指令RET的操作为:IP(SP)+1(SP)栈顶内容弹出到IPSP(SP)+2CS(SP)+1(SP)栈顶内容弹出到CSSP(SP)+2另有一种带立即数返回指令:RETn其中n为偶数,表示从栈顶弹出地址后另外丢弃的字节数。例:RET4返回后再丢弃栈顶的4个字节44中断控制指令中断控制指令80868088CP

13、U在程序中允许安排一条中断指令来引起一个中断过程这种中断叫内部中断或叫软中断。中断指令共有三条:(1)INTn执行类型n的中断服务程序,N=0255(2)INTO执行溢出中断的中断服务程序;(3)IRET从中断服务程序返回调用程序。(1)INTnn=0255为中断类型号本指令的操作步骤为:(SP)-1(SP)-2)(FLAGS),SP(SP)-2保护标志寄存器的内容IF0TF0中断服务程序中禁止外部INTR中断和单步中断(SP)-1(SP)-2)(CS),SP(SP)-2,CS(n4+2)中断服务程序的段地址送入CS。n4为向量地址。该向量地址中的内容即为中断服务程序入口地址。(SP)-1(S

14、P)-2)(IP),SP(SP)-2,IP(n4)中断服务程序的偏移地址送IP。INT指令只影响IF和TF对其余标志位无影响。INT指令可用于调用系统服务程序,如INT21H。(2)溢出中断INTOINTO检查溢出标志OF如果OF=1则启动一个类型4的中断过程;如果OF=0不做任何操作。通常INTO指令安排在有符号数算术运算指令后面。如:IMULDXINTO若溢出,则启动INT4否则继续MOVRESULTAXMOVRESULT+2DX(3)中断返回指令IRET用于从中断服务程序返回到被中断的程序。任何中断服务程序不管是外部中断引起的还是内部中断引起的最后都要用IRET返回。该指令执行的操作为IP(SP)+1(SP)栈顶内容弹出到IPSP(SP)+2CS(SP)+1(SP)栈顶内容弹出到CSSP(SP)+2FLAGS(SP)+1(SP)栈顶内容弹出到FLAGSP(SP)+2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号