微机原理3-3指令系统Ⅴ控制转移.ppt
,第二部分 8086/8088指令系统四程序控制转移指令 程序控制转移类指令用来控制程序的执行顺序。程序的执行顺序是由CS和IP确定的(一)无条件转移指令 JMP(二)条件转移指令(三)循环控制指令(四)子程序调用与返回指令(五)中断指令,(一)无条件转移指令JMP 格式:JMP OPRD功能:若OPRD为16位数,则IPOPRD,实现段内转移;若OPRD为32位数,则IPOPRD低16,CSOPRD高16,段间转移。注解:(1)OPRD常是标号Lable,即某条指令的符号地址。先定义标号,后引用,为“向后引用”;先引用标号,后定义,为“向前引用”。,(2)该指令有如下5种形式:、JMP SHORT Lable;段内短转移 SHORT为短转移运算符(可以省略),标号为短标号8bit,范围不超过-128+127。执行:IPOFFSET 标号Lable,CS不变。、JMP NEAR PTR Lable;段内直接转移 NEAR PTR为近距离属性运算符,标号是近标号16bit。范围不超过-32768+32767。执行:IPOFFSET 标号Lable,CS不变。,、JMP R16/MEM16;段内间接转移 OPRD是16bit的寄存器或者存储器地址。范围是段内任何地方。执行:IP(R16),CS内容不变。、JMP FAR PTR Lable;段间直接转移 FAR Lable是远距离属性运算符,Lable是远标号,在另一个代码段内。执行:IPOFFSET Lable,CS SEG Lable。,、JMP MEM32:段间间接转移 MEM32为双字单元的存储器地址,不能够用Reg替代。转移范围可达1MB。执行:IP(MEM低16,前2字节),CS(MEM高16,后2字节)。,例:JMP SHORT Again;段内短转移 JMP NEAR PTR Begin;段内直接转移 JMP WORD PTR BP DI;段内间接转移 JMP BX;段内间接转移 JMP FAR PTR Next;段间直接转移 JMP DWORD PTR BX DI;段间间接转移,第二部分 8086/8088指令系统四程序控制转移指令(一)无条件转移指令JMP(二)条件转移指令19条 1、基于算术标志位的的条件转移指令10条 JC/JNC JO/JNO JS/JNS JE/JNE(JZ/JNZ)JP/JNP(JPE/JPO)2、基于无符号数的条件转移指令4条 JA/JNBE JAE/JNB JB/JNAE JBE/JNA 3、基于有符号数的条件转移指令4条 JG/JNLE JGE/JNL JL/JNGE JLE/JNG 4、计数器为0条件转移指令1条 JCXZ(三)循环控制指令(四)子程序调用与返回指令(五)中断指令,格式:JSHORT Lable功能:IP(IP)+disp(8bit)CS 不变 根据FR中标志位来判断是否需要转移。如满足转移条件,则转移到指定的目标地址。如不满足转移条件,则顺序执行下一条指令。注解:(1)全部条件转移指令都是段内直接短转移,转移地址的偏移量限制在-128+127范围内。,(2)条件转移指令中,条件缩写字母的含义是:AAbove 高于 BBelow 低于 CCarry 进位 EEqual 等于 GGreater 大于 LLess 小于 NNot 无 OOver 溢出 SSign 符号 JJump 跳转PE/POParity Even奇偶性偶/奇,1、基于算术标志位的的条件转移指令,(1)JC有进位/借位转移指令 形式:JC 标号 功能:CF=1转移到标号处执行,否则顺序执行。,(2)JNC无进位/借位转移指令 形式:JNC 标号 功能:CF=0转移到标号处执行,否则顺序执行。,(4)JNO无溢出转移指令 形式:JNO 标号 功能:未溢出(OF=0)转移到标号处执行,否则顺序执行。,(3)JO溢出转移指令 形式:JO 标号 功能:溢出(OF=1)转移到标号处执行,否则顺序执行。,(5)JS负数转移指令 形式:JS 标号 功能:若结果为负(SF=1)转移到标号处执行,否则顺序执行。,(6)JNS正数转移指令 形式:JNS 标号 功能:若结果为正(SF=0)转移到标号处执行,否则顺序执行。,(7)JE/JZ等于转移指令 形式:JE/JZ 标号 功能:若等于(ZF=1)转移到标号处执行,否则顺序执行。,(8)JNE/JNZ不等于转移指令 形式:JNE/JNZ 标号 功能:若不等于(ZF=0)转移到标号处执行,否则顺序执行。,(10)JNP/JPO奇性转移指令 形式:JNP/JPO 标号 功能:若结果的低8位有奇数个“1”(PF=0)转移到标号处执行,否则顺序执行。,(9)JP/JPE偶性转移指令 形式:JP/JPE 标号 功能:若结果的低8位有偶数个“1”(PF=1)转移到标号处执行,否则顺序执行。,该组指令需要检测单个位,常与TEST连用,2、基于无符号数的条件转移指令,(1)JA/JNBE大于/不低于不等于转移指令(AB)形式:JA/JNBE 标号 功能:若大于(CF=0 且 ZF=0)转移到标号处执行,否则顺序执行。,(2)JAE/JNB大于等于/不低于转移指令(AB)形式:JAE/JNB 标号 功能:若大于等于(CF=0 或 ZF=1)转移到标号处执行,否则顺序执行。,(4)JBE/JNA低于等于/不高于转移指令(AB)形式:JBE/JNA 标号 功能:若小于(CF=1 或 ZF=1)转移到标号处执行,否则顺序执行,(3)JB/JNAE低于/不高于不等于转移指令(AB)形式:JB/JNAE 标号 功能:若小于(CF=1 且 ZF=0)转移到标号处执行,否则顺序执行。,该组指令需要检测CF、ZF位,常与CMP连用,(1)JG/JNLE大于/不小于不等于转移指令(AB)形式:JG/JNLE标号 功能:若大于(SF=OF 且 ZF=0)转移到标号处执 行,否则顺序执行。,(2)JGE/JNL大于等于/不小于转移指令(AB)形式:JGE/JNL标号 功能:若大于等于(SF=OF 或 ZF=1)转移到标号处 执行,否则顺序执行。,3、基于有符号数的条件转移指令,(3)JL小于/不大于不等于转移指令(AB)形式:JL/JNGE标号 功能:若小于(SFOF 且 ZF=0)转移到标号处执 行,否则顺序执行。,(4)JLE小于等于/不大于转移指令(AB)形式:JLE/JNG标号 功能:若小于等于(SFOF=1 或 ZF=1)转移到标号处执行,否则顺序执行。,该组指令需要检测SF、OF、ZF位,常与CMP连用,JCXZ计数零转移指令 形式:JCXZ标号 功能:若CX=0,转移到标号处执行,否则顺序执行。,4、计数器为0条件转移指令,MOV AL,1000H TEST AL,01H JZ NO MOV CL,0 JMP EXIT NO:MOV CL,1EXIT:HLT,例:在存储器的数据段存放了1个8位无符号数,偏移地址为1000H,判断它是否偶数。是,则将CL寄存器置1,否则CL置0。,第二部分 8086/8088指令系统四程序控制转移指令(一)无条件转移指令 JMP(二)条件转移指令(三)循环控制指令 1、LOOP 2、LOOPE/LOOPZ 3、LOOPNE/LOOPNZ(四)子程序调用与返回指令(五)中断指令,特点:(1)段内短距离相对转移指令,控制程序段的循环执行。(2)循环次数由CX指定。1、循环转移指令 LOOP形式:LOOP short-lable功能:CXCX-1,若(CX)0,则(IP)=(IP)+disp8,转移到目标地址;否则结束循环,继续执行下一句。注解:功能相当于:DEC CX JNZ short-lable,但LOOP对FR无影响。,例:求S=1+2+3+100,MOV CX,100 MOV AX,0 MOV DX,0001HREPEAT:ADD AX,DX INC DX LOOP REPEAT HLT,2、相等(为零)循环转移指令LOOPE/LOOPZ 形式:LOOPE/LOOPZ short-lable 功能:CXCX-1;若CX0且ZF=1,则(IP)=(IP)+disp8,转移到目标地址循环;否则执行下一条指令。,3、不相等(不为零)循环转移指令 LOOPNE/LOOPNZ 形式:LOOPNE/LOOPNZ short-lable功能:CXCX-1;若CX0且ZF=0,则(IP)=(IP)+disp8,转移到目标地址;否则执行下一条指令。,例:从0B00H单元开始存放了256字节的字串,里面有若干“#”,请寻找到第一个“#”后送入AL,且将其地址送入DX中。“#”的ASCII码值为23H,MOV CX,0100H;(CX)256 MOV SI,OAFFH;(SI)0AFFHCYCLE:INC SI;(SI)=0B00H CMP SI,23H;比较,置FR中ZF位 LOOPNE CYCLE;没找到就循环CYCLE程序段,找到了就执行下一句 MOV AL,SI;(AL)23H MOV DX,SI;(DX)(SI)HLT;暂停,例:100个8位带符号数存放在2000H开始的单元,统计负数,将个数存在NUM单元中。,MOV NUM,0;清0 MOV SI,2000H;赋首地址 MOV CX,100;给循环次数AGAIN:MOV AL,SI;取被统计数 OR AL,AL;影响FR的SF JNS NOT-NUM;非负,转移 INC NUM;负数数量+1NOT-NUM:INC SI;地址指向下一个数 LOOP AGAIN;CX-1不为0则循环 HLT;程序暂停,第二部分 8086/8088指令系统四程序控制转移指令(一)无条件转移指令 JMP(二)条件转移指令(三)循环控制指令(四)子程序调用与返回指令 1、CALL 2、RET(五)中断指令,定义:一种非连续而又多次重复的程序段(或叫过程)特点:程序中常用到的具有相同功能的部分独立出来形成。需要时用调用指令CALL进行调用,子程序结束后,用返回指令RET再返回原来调用的地方。优点:源程序长度缩短,有利于模块化设计,使程序的编制、阅读和修改都比较方便。,补充:子 程 序,格式:子程序定义的格式一般如下:子程序名 PROCNEAR/FAR 子程序体 RET 子程序名 ENDP注解:1、对子程序定义的具体规定如下:“子程序名”必须是一个合法的标识符,并且要前后一致;PROC和ENDP必须是成对出现的关键字,它们分别表示子程序定义开始和结束。,补充:子 程 序,2、子程序名有3个属性:段值、偏移量和类型。其段值和偏移量对应于子程序的入口地址;子程序的类型有NEAR、FAR之分,其缺省的类型是近调用NEAR型。3、在编写子程序时,除了要考虑实现子程序程序功能的方法,还要养成编制相应的说明文件的好习惯。其说明信息一般包括以下内容:子程序功能描述 入口参数和出口参数 子程序中所用寄存器 子程序所采用的算法,补充:子 程 序,4、调用程序要使用子程序时,仅用语句“CALL 子程序名”即可。此时,调用程序提供给子程序的相应的数据称为子程序的“入口参数”。子程序接受数据,进行加工、运算、处理,将结果数据(称为“出口参数”)返回调用程序。调用程序与子程序之间传递参数的方法有:约定某个存储器单元 Mem 约定某个寄存器 Reg 约定堆栈传递(SS:SP),补充:子 程 序,1、调用指令CALL 形式:CALLOPRD 功能:先保存断点地址(断点的CS、IP入栈),再用子程序所在的段的段基值和偏移量修改原来的CS、IP值。,(1)若OPRD为16位数时,先保留返回地址IP于栈中:SP(SP)-2(SS:SP)(IP)再,修改IP,实现段内转移:IPOPRD(OFFSET PROC)(2)若OPRD为32位数时,先保留返回地址CS:IP于栈中:SP(SP)-2(SS:SP)(CS)SP(SP)-2(SS:SP)(IP)再,修改IP、CS,实现段间转移:IPOPRD低16 CS OPRD高16。,注解:由于子程可能与主程序同在一个段内,也可能不同在一个段内,与JMP指令类似,调用指令也分如下四种:段内直接调用 例:CALL 0120H;调用地址由指令给出.执行的操作为:(SP)-1:(SP)-2)(IP);IP压栈(SP)(SP)-2;修改SP(IP)(IP)+偏移量;修改IP,段内间接调用例:CALL AX;调用地址由AX给出.CALL SI;调用地址由存储器给出.指令的操作为:(SP)-1:(SP)-2)(IP)(SP)(SP)-2(IP)(reg16)/(mem16),段间直接调用 例:CALL 2000H:1000H指令的操作为:先CS后IP(SP)-1,(SP)-2)(CS);CS压栈(SP)(SP)-2;修改SP(CS)段地址;(CS)给定段地址(SP)-1,(SP)-2)(IP);IP压栈(SP)(SP)-2;修改SP(IP)偏移地址;(IP)给定偏址,段间间接调用 例:CALL DWORD PTRDI;调用地址在DI,DI+1,DI+2,DI+3所指的存储单元中,前两个字节内容为偏移地址,后两个字节内容为段地址.执行的操作与段间直接调用类似。,2、返回指令 RET 形式1:RET 功 能:从堆栈取断点地址送入IP、CS中。若为近过程NEAR返回指令,则:(IP)(SP)+1:SP)(SP)(SP)+2 若为远过程FAR返回指令,则:(IP)(SP)+1:SP)(SP)(SP)+2(CS)(SP)+1:SP)(SP)(SP)+2,形式2:RET n功 能:带弹出值的返回指令 弹出断点地址(段内返回弹出2字节,段间返回弹出4字节)(IP)(SP)+1:SP)(SP)(SP)+2 或:(IP)(SP)+1:SP)(SP)(SP)+2(CS)(SP)+1:SP)(SP)(SP)+2 用n(偶数)修改SP:(SP)(SP)+n 用于将执行CALL指令前压入堆栈的一些参数丢弃。,第二部分 8086/8088指令系统四程序控制转移指令(一)无条件转移指令 JMP(二)条件转移指令(三)循环控制指令(四)子程序调用与返回指令(五)中断指令 1、INT 2、IRET 3、INTO,中断:CPU对某一突发事件的响应,它将使CPU暂停正在执行的程序,自动转去处理该突发事件,待CPU处理完该事件后,再返回到原来的断点,继续执行原来的程序。,中断源:引起中断的原因或来源。8086/8088CPU可以处理256种类型的中断,这些中断有些来自CPU内部,有些来自CPU外部,因此可以把中断分为内部中断和外部中断两大类。,中断的相关概念,外部中断:非CPU内部原因产生的中断的统称。外部中断又分为非屏蔽中断和可屏蔽中断。可屏蔽中断产生中断请求时,CPU 是否要响应要受标志寄存器IF标志位控制:如果IF=1(允许中断),则可屏蔽中断的请求将被CPU响应;如果IF=0(禁止中断),则CPU将不响应这类中断。非屏蔽中断是不受IF限制的,不论IF是什么,CPU一定要响应非屏蔽中断,中断的相关概念,内部中断:由CPU内部引起的中断。主要类型有:1)除法出错中断:当除数为0或除法中的商过大时,将产生这一中断。2)INT0 溢出中断:这是一条软件中断指令,当执行这个指令时,若由于前面的运算已产生溢出,使OF=1,就会产生一个内部中断;但如果OF=0,则不会产生中断。3)INT n中断指令:这是常用的一条软中断指令。操作系统把一些常用的输入输出、文件处理等基本操作,编制成子程序提供给程序员在编写的源程序时直接调用。调用这些子程序均要使用中断指令INT,也就是说,系统把这些子程序作为一种中断服务程序,以内部中断形式来执行这些基本操作。4)单步中断:这是为调试程序提供的强有力手段。若标志寄存器中单步标志位TF=1,则CPU将进入单步工作方式,即每执行一条指令就自动产生内部中断,暂停执行程序,以便用户检查程序执行结果。,中断的相关概念,中断号:为了便于管理8086/8088的256种中断,系统为每一个中断源都分配了一个中断号,其编号为00FF。0031号中断系统使用 3296号中断被DOS和BIOS使用或保留 128-240号被BASIC使用或保留 其余中断号可以用户自行确定使用,中断的相关概念,中断向量表:不同的中断源要求的中断处理是不相同的,每一个中断都要有一个中断处理程序。8086/8088 把各中断源所对应的中断处理程序入口地址存放在其中内存最低的1K空间内,建立了一个中断向量表。每个入口地址由四个字节组成:两个低字节存放入口地址的偏移量 两个高字节存放入口地址的段地址,中断的相关概念,中断的相关概念,中断向量表内的每个入口地址顺序对应一个中断类型,当有中断产生时,就可以方便地从表中找到该中断源所对应的处理程序入口地址。:设中断号为N,则其中断处理程序的入口偏移地址存放在(4*N)字单元中,段地址放在(4*N+2)字单元中。当CPU响应中断后,将把表中对应的四个字节内容分别送入IP和CS,完成程序的转移。,中断指令,1、软件中断指令INT 形式:INT n 功能:n为中断号。SP(SP)-2,(SS:SP)FR;保护FRIF0,TF0;清除标志位IF和TF,非单步执行 SP(SP)-2,(SS:SP)CS;当前CS压栈保护SP(SP)-2,(SS:SP)IP;当前IP压栈保护CS(0000:n4+2),IP(0000:n4);送中断n的处理程序的入口地址到CS、IP寄存器中,2、中断返回指令IRET 形式:IRET 功能:从中断处理程序返回,用在中断处理程序最后。IP(SS:SP),SP(SP)+2;恢复IPCS(SS:SP),SP(SP)+2;恢复CSFR(SS:SP),SP(SP)+2;恢复FR 现场恢复次序:先入后出后入先出:IP-CS-FR,3、溢出中断指令INTO 形式:INTO 功能:该指令检查溢出标志OF,如果OF=1,则启动INT 4的中断,给出出错标志,如果OF=0,不做任何操作。注解:(1)通常INTO指令在有符号数加、减运算指令后。(2)INT 4的中断向量为44=16=10H,中断和子程序的区别是什么?(1)子程序的调用直接通过CALL指令来实现,中断的调用须先把中断服务程序入口地址存入0000:n4起始的4个内存单元,INT n才能正确调用。(2)子程序的返回指令是RET,中断服务程序的返回指令是IRET。(3)子程序通常是由应用程序的开发者编写的,中断服务程序是由系统软件设计者编写的。如ROM BIOS内程序、DOS调用程序。(4)子程序是在执行时才调入内存,中断服务程序是常驻内存的。,