收藏 分销(赏)

微机原理 第5章5.2.5控制转移类指令与处理器控制指令.ppt

上传人:s4****5z 文档编号:11213718 上传时间:2025-07-07 格式:PPT 页数:59 大小:437.50KB 下载积分:10 金币
下载 相关 举报
微机原理 第5章5.2.5控制转移类指令与处理器控制指令.ppt_第1页
第1页 / 共59页
微机原理 第5章5.2.5控制转移类指令与处理器控制指令.ppt_第2页
第2页 / 共59页


点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,单击此处编辑母版标题样式,*,*,第,5,章,5.2.5,控制转移类指令,控制转移类指令,用于实现分支、循环、过程等程序结构,是仅次于传送,指令的常用指令,重点掌握:,JMP/,Jcc,/LOOP CALL/RET,INT n/IRET,常用系统功能调用,一般了解:,LOOPZ/LOOPNZ INTO,控制转移类指令通过,改变,IP,(和,CS,),值,实现程序执行顺序的改变,一、无条件转移指令,只要执行无条件转移指令,JMP,,就使程序转到指定的目标地址处,从目标地址处开始执行指令,根据目标地址,(,目的地址,、,转移地址,)的表达形式以及跳转的距离,JMP,指令分成,5,种类型:,段内直接短,转移,段内直接,近转移 例,:,JMP LABLE,段内间接,转移,段间直接转移,段间间接转移,JMP,目标地址;,目标地址的表达形式,直接寻址方式,转移地址象立即数一样,直接在指令的机器代码中,间接寻址方式,转移地址在寄存器或主存单元中,例,JMP AX,用标号表达,用寄存器或存储器操作数表达,目标地址的范围:,段内,段内转移,近转移(默认),跳转的距离在,-32768+32767,之间。,不需要更改,CS,段地址,,只要改变,IP,偏移地址,当向地址增大方向转移时,位移量为,正,;向地址减小方向转移时,位移量为,负,段内转移,短转移(,short,ptr,),目标地址与,JMP,指令的下一条地址之间的差值为,-128+127,代码段,代码段,目标地址的范围:段间,段间转移,远转移,(far,ptr,),从当前代码段跳转到另一个代码段,可以在,1MB,范围,更改,CS,段地址和,IP,偏移地址,目标地址必须用一个,32,位数表达,叫做,32,位远指针,,它就是逻辑地址,代码段,代码段,段内直接转移,JMP label,;,IPlabel,当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负,again:,dec,cx,;标号,again,的指令,jmp,again,;转移到,again,处继续执行,jmp,output,;转向,output,output:,mov,result,al,;标号,output,的指令,段内间接转移,JMP r16/m16,;,IPr16/m16,将一个,16,位寄存器或主存字单元内容送入,IP,寄存器,作为新的指令指针,但不修改,CS,寄存器的内容。,【,例,5.47】,设,DS:1200H=00H,,,DS:1201H=20H,MOVAX,1200H,JMPAX;IP=1200H,JMPWORD PTR 1200H ;IP=2000H,段间直接转移,JMP far,ptr,label,;,IPlabel,的偏移地址,;,CSlabel,的段地址,将标号所在段的段地址作为新的,CS,值,标号在该段内的偏移地址作为新的,IP,值;这样,程序跳转到新的代码段执行,段间间接转移,JMP far,ptr,mem,;,IPmem,,,CSmem+2,用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元中的,,低位字送,IP,寄存器,高位字送,CS,寄存器,mov,word,ptr,bx,0,mov,word,ptr,bx+2,1500h,JMP far,ptr,bx,;转移到,1500h:0,二、条件转移指令,指定的条件,cc,如果成立,程序转移到由标号,label,指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令,操作数,label,是,采用直接寻址方式的短转移标号,表示,Jcc,指令跳转到的那条指令的偏移地址,距当前,IP,地址,128,127,个单元的范围之内,Jcc,label,;,cc,为跳转条件:满足,转移,IPlabel,;不满足,顺序执行,Jcc,指令的分类,Jcc,指令不影响标志,但要利用标志(,表,5.31,)。根据利用的标志位不同,,18,条指令分成,3,种情况:,1.,判断单个标志位状态,2.,比较无符号数高低,3.,比较有符号数大小,转移条件,cc,:单个标志状态,JZ/JE,ZF=1,Jump if Zero/Equal,JNZ/JNE,ZF=0,Jump if Not Zero/Not Equal,JS,SF=1,Jump if Sign,JNS,SF=0,Jump if Not Sign,JP/JPE,PF=1,Jump if Parity/Parity Even,JNP/JPO,PF=0,Jump if Not Parity/Parity Odd,JO,OF=1,Jump if Overflow,JNO,OF=0,Jump if Not Overflow,JC,CF=1,Jump if Carry,JNC,CF=0,Jump if Not Carry,第,5,章,采用多个助记符,只是为了方便记忆和使用,转移条件,cc,:两数大小关系,JB/JNAE,CF=1,Jump if Below/Not Above or Equal,JNB/JAE,CF=0,Jump if Not Below/Above or Equal,JBE/JNA,CF=1,或,ZF=1,Jump if Below or Equal/Not Above,JNBE/JA,CF=0,且,ZF=0,Jump if Not Below or Equal/Above,JL/JNGE,SFOF,Jump if Less/Not Greater or Equal,JNL/JGE,SF=OF,Jump if Not Less/Greater or Equal,JLE/JNG,ZFOF,或,ZF=1,Jump if Less or Equal/Not Greater,JNLE/JG,SF=OF,且,ZF=0,Jump if Not Less or Equal/Greater,第,5,章,判断单个标志位状态,这组指令单独判断,5,个状态标志之一,JZ,/,JE,和,JNZ,/,JNE,:利用零标志,ZF,,判断结果是否为零(或相等),JS,和,JNS,:利用符号标志,SF,,判断结果是正是负,JO,和,JNO,:利用溢出标志,OF,,判断结果是否产生溢出,JP,/,JPE,和,JNP,/,JPO,:利用奇偶标志,PF,,判断结果中“,1”,的个数是偶是奇,JC,和,JNC,:利用进位标志,CF,,判断结果是否进位或借位,补充例题,1,补充例题,2,补充例题,3,补充例题,4,补充例题,5,例,1,:,JZ/JNZ,指令,test al,80h,;测试最高位,jz,next0,;,D7,0,(,ZF,1,),转移,mov,ah,0ffh,;,D7,1,,顺序执行,jmp,done,;无条件转向,next0:,mov,ah,0,done:.,test al,80h,;测试最高位,jnz,next1,;,D7,1,(,ZF,0,),转移,mov,ah,0,;,D7,0,,顺序执行,jmp,done,;无条件转向,next1:,mov,ah,0ffh,done:.,例,2,:,JS/JNS,指令,;,计算,|X,Y|,(绝对值),;,X,和,Y,为存放于,X,单元和,Y,单元的,16,位操作数,;结果存入,result,mov,ax,X,sub,ax,Y,jns,nonneg,;,SF=0,,正数,neg,ax,;,neg,是求补指令,nonneg,:,mov,result,ax,例,3,:,JO/JNO,指令,;计算,X,Y,;,;,X,和,Y,为存放于,X,单元和,Y,单元的,16,位操作数,;若溢出,则转移到,overflow,处理,mov,ax,X,sub,ax,Y,jo,overflow,.,;无溢出,结果正确,overflow:,.,;有溢出处理,例,4,:,JP/JNP,指令,;设,字符的,ASCII,码,在,AL,寄存器中,;将字符加上奇校验位,;在字符,ASCII,码中为“,1”,的个数已为奇数时,;则令其最高位为“,0”,;否则令最高位为“,1”,and al,7fh,;最高位置“,0”,,同时判断“,1”,的个数,jnp next,;个数已为奇数,则转向,next,or al,80h,;否则,最高位置“,1”,next:,.,例,5,:,JC/JNC,指令,;记录,BX,中,1,的个数,xor,al,al,;,AL,0,,,CF,0,again:test bx,0ffffh,;等价于,cmp,bx,0,je,next,;,bx,=0,(一的个数为,0,)跳到,next,shl,bx,1,jnc,again,;,CF=0,,,again,CF=1,BX,中有一个,1,inc al,;,AL,保存,1,的个数,jmp,again,next:,.,另一种做法,记录,BX,中“,1”,的个数,xor,al,al,;,AL,0,,,CF,0,again:,cmp,bx,0,jz,next,shl,bx,1,;也可使用,shr,bx,1,adc,al,0,;,al,CF,al,jmp,again,next:,.,;,AL,保存,1,的个数,比较无符号数高低,无符号数的大小用高(,Above,)低(,Below,)表示,两数的高低分成,4,种关系:,低于(不高于等于):,JB,(,JNAE),高于等于(不低于):,JAE,(,JNB,),低于等于(不高于):,JBE,(,JNA,),高于(不低于等于):,JA,(,JNBE,),例,5.49,:比较无符号数,【,例,5.49】,比较无符号数,AX,、,BX,和,CX,的大小,将最小数存于,AX,中。,CMP BX,CX,JBNEXT1,;,若,BXCX,,则继续比较,AX,和,BX,XCHGBX,CX,NEXT1:CMPAX,BX,JAENEXT2,;,若,AX,BX,,则放小数到,AX,RET,NEXT2:XCHGAX,BX,RET,比较有符号数大小,有符号数的大用(,Greater,),小用(,Less,)表示。,两数的大小分成,4,种关系:,小于(不大于等于):,JL,(,JNGE,),大于等于(不小于):,JGE,(,JNL,),小于等于(不大于):,JLE,(,JNG,),大于(不小于等于):,JG,(,JNLE,),例:比较有符号数,cmp,ax,bx,;比较,ax,和,bx,jnl,next,;若,ax,bx,,转移,xchg,ax,bx,;若,ax,bx,,交换,next:,.,结果:,AX,保存较大的,有符号数,三、循环指令,(loop,),循环指令默认利用,CX,计数器,label,操作数采用,直接短转移寻址方式,LOOP label,;,CXCX,1,,,;,CX0,,循环到标号,label,LOOPZ/LOOPE label,;,CXCX,1,,,;,CX0,且,ZF,1,,循环到标号,label,LOOPNZ/LOOPNE label,;,CXCX,1,,,;,CX0,且,ZF,0,,循环到标号,label,JCXZ label,;,CX,0,,转移到标号,label,例,5.50,【,例,5.50】,将,S1,和,S2,中每个数据依次相加,结果保存在,S2,中。,S1DB 0,1,2,3,4,S2DB 1,1,1,1,1,CLD,LEASI,S1,LEADI,ES:S2,MOVCX,5;,设置循环次数,位于循环体外部,NEXT:,LODSB;,将,S1,的数据存入,AL,ADD AL,ES:DI ;,将,S1,与,S2,对应相加,结果在,AL,中,STOSB;,将,AL,数据存入,ES:DI,LOOPNEXT,;,循环执行,直到,CX-1=0,RET,dec,cx,jnz,next,四、子程序指令,子程序是完成特定功能的一段程序,当主程序(调用程序)需要执行这个功能时,采用,CALL,调用指令转移到该子程序的起始处执行,当运行完子程序功能后,采用,RET,返回指令回到主程序继续执行,演示,主程序与子程序,CALL label,主程序,RET,子程序,回到,CALL,指令后的指令处,返回地址,第,2,章,CALL,指令格式,指令格式,说明,CALL LABEL,段内调用,子程序,LABEL,。原,IP,指针进栈保护。,最常见的一种,CALL,指令格式。,CALL r16/m16,段内调用,,跳转到,r16/m16,中的数据所对应的地址处执行。原,IP,指针进栈保护。,CALL FAR PTR LABEL,段间调用,子程序。子程序与主程序在不同的段,故调用时原,CS,、,IP,依次进栈保护。,CALL FAR PTR,mem,段间调用,,调用时原,CS,、,IP,依次进栈保护。子程序位置,IP=,mem,,,CS=mem+2,。,子程序调用指令,CALL,指令需要保存返回地址,:,段内调用,入栈偏移地址,IP,SPSP,2,,,SS:SP,IP,段间调用,入栈段地址,CS,和偏移地址,IP SPSP,2,,,SS:SP,CS,SPSP,2,,,SS:SP,IP,2,、子程序返回指令,RET,指令格式,说明,RET,子程序调用返回。,最常用的一种返回指令,。若为段内调用,则原,IP,出栈恢复;若为段间调用,则原,IP,、,CS,依次出栈恢复。,RET i16,有参数返回。若为段内调用,则原,IP,先出栈恢复,再将堆栈中,SP+i16,;若为段间调用,则原,IP,、,CS,依次出栈恢复,再将堆栈中,SP+i16,。,补充例题:子程序调用与返回,;主程序,mov,al,0Ah,;提供参数,AL,call,htoasc,;调用子程序,.,;子程序,:将,AL,低,4,位的一位,16,进制数,转换,成,ASCII,码,htoasc,:and al,0fh,;只取,al,的低,4,位,or al,30h,;,al,高,4,位变成,3,cmp,al,39h,;是,0,9,,还是,0Ah,0Fh,jbe,htoend,add al,7,;是,0Ah,0Fh,,加上,7,AL=41,htoend,:,ret,;子程序返回,例:利用子程序完成将,AL,中的低,4,位中的一位,16,进制数转换成相应的,ARSII,码。,五、中断指令,中断,(,Interrupt,)是又一种改变程序执行顺序的方法,中断具有多种,中断类型,中断的指令有,3,条:,INT i8 IRET INTO,本节主要掌握类似子程序调用指令的中断调用指令,INT i8,,进而学习使用,DOS,功能调用,中断的过程,主程序,IRET,中断服务程序,断点,中断请求,中断请求可以来自处理器外部的中断源,也可以由处理器执行指令引起:,例如执行,INT i8,指令。,第,2,章,8086,的外部中断,8086,可以管理,256,个中断,各种中断用一个向量编号来区别,主要分成外部中断和内部中断,外部中断,来自,CPU,之外的原因引起的中断,又可以分成,可屏蔽中断,:可由,CPU,的中断允许标志,IF,控制,不可屏蔽中断,:不受,CPU,的中断允许标志,IF,控制,8086,的内部中断,内部中断,CPU,内部执行程序引起的中断,又可以分成:,除法错中断,:执行除法指令,结果溢出产生的,0,号中断,单步中断,:,TF,1,在每条指令执行后产生的,1,号中断,断点中断,:用于断点调试(,INT 3,)的,3,号中断,溢出中断,:执行溢出中断指令,,OF,1,产生的,4,号中断,指令中断,:执行中断调用指令,INT i8,产生的,i8,号中断,中断指令,INT,INT i8,;中断调用指令:产生,i8,号中断,IRET,;中断返回指令:实现中断返回,INTO,;溢出中断指令:,;若溢出标志,OF=1,,产生,4,号中断,;否则顺序执行,6.3,系统功能调用,21,H,号,中断是,DOS,提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能,ROM-BIOS,也以中断服务程序的形式,向程序员提供系统的基本输入输出程序,汇编语言程序设计需要采用系统的各种功能程序,充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握,功能调用的步骤,通常按照如下,4,个步骤进行:,在,AH,寄存器中设置系统功能调用号,在指定寄存器中设置入口参数,执行指令,INT 21H,(或,ROM-BIOS,的中断向量号)实现中断服务程序的功能调用,根据出口参数分析功能调用执行情况,输入输出类功能调用,向显示器输出字符,字符的输出,字符串的输出,从键盘输入数据,字符的输入,字符串的输入,按键的判断,裸机,ROM-BIOS,DOS功能调用,汇编语言程序,一、字符的输出,DOS,功能调用,INT 21H,功能号:,AH,02H,入口参数:,DL,字符的,ASCII,码,功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按,Ctrl-Break,或,Ctrl-C,则退出,6.3.3 ROM-BIOS,功能调用,一个字符的输出,功能调用,INT 10H,功能号:,AH,0EH,入口参数:,AL,字符的,ASCII,码,BL,字符的颜色值(图形方式),BH,页号(字符方式),通常使,BX,0,功能:将字符按原属性在光标处显示,光标自动移到下一个字符位置,例,6.29,:显示字母,K,;在当前显示器光标位置显示一个问号,mov,ah,02h,;设置功能号:,ah02h,mov,dl,K,;提供入口参数:,dlK,int,21h,;,DOS,功能调用:显示,进行字符输出时,当输出响铃字符(,07H,)以及退格(,08H,)、回车(,0DH,)和换行(,0AH,)字符时,该功能调用可以自动识别并能进行相应处理,二、字符串输出的功能调用,DOS,功能调用,INT 21H,功能号:,AH,09H,入口参数:,DS:DX,欲显示字符串在主存中的首地址,字符串应以,$,(或,24H,)结束,功能:在显示器输出指定的字符串,可以输出回车(,0DH,)和换行(,0AH,)字符产生回车和换行的作用,例,6.30,:显示字符串,string db,Hello,Everybody,!,0dh,0ah,$,;在数据段定义要显示的字符串,.,mov,ah,09h,;设置功能号:,ah09h,mov,dx,offset,string,;提供入口参数:,dx,字符串的偏移地址,int,21h,;,DOS,功能调用:显示,三、字符输入的功能调用,DOS,功能调用,INT 21H,功能号:,AH,01H,出口参数:,AL,字符的,ASCII,码,功能:获得按键的,ASCII,代码值,调用此功能时,若无键按下,则会一直等待,直到按键后才读取该键值,例,6.31,:判断按键是,Y?N,mov,ah,01h,;功能号:,ah01h,int,21h,;功能调用,cmp,al,Y,;处理出口参数,al,jz,keyyes,;是“,Y”,cmp,al,N,jz,keyno,;是“,N”,keyyes,:.,keyno,:.,四、字符串输入的功能调用,DOS,功能调用,INT 21H,功能号:,AH,0AH,入口参数:,DS:DX,缓冲区首地址,执行该功能调用时,用户按键,,最后用回车确认,本调用可执行全部标准键盘编辑命令;用户按回车键结束输入,如按,Ctrl,Break,或,Ctrl,C,则中止,关键要定义好,缓冲区,缓冲区的定义,第,1,字节,事先填入,最多欲接收的字符个数,(包括回车字符,可以是,1,255,),第,2,字节,将存放,实际输入的字符个数,(不包括回车符),第,3,字节,开始将存放,输入的字符串,实际输入的字符数多于定义数时,多出的字符丢掉,第,5,章,例,6.32,:输入字符串,sbuf,db 21,;定义缓冲区,;第,1,个字节填入可能输入的最大字符数,db 0,;存放实际输入的字符数,db 21 dup(0),;存放输入的字符串,.,mov,dx,seg,sbuf,;伪指令,seg,取得,sbuf,的段地址,mov,ds,ax,;设置数据段,DS,mov,dx,offset,buffer,mov,ah,0ah,int,21h,5.2.6,处理机控制类指令,处理器控制类指令可以分为两类,一、标志位操作指令(共,7,条),CLC,STC,CMC,(,CF,),CLD,STD,(,DF,),CLI,STI,(,IF,),二、处理器协调类指令,对,CPU,状态进行控制的指令,NOP,LOCK,HLT,ESC,WAIT,进位标志操作指令,用于任意设置进位标志,CLC,;复位进位标志:,CF0,STC,;置位进位标志:,CF1,CMC,;求反进位标志:,CF,CF,方向标志操作指令,串操作指令中,需要使用,CLD,;复位方向标志:,DF0,STD,;置位方向标志:,DF1,中断标志操作指令,在编写中断服务程序时,需要控制可屏蔽中断的允许和禁止,CLI,;复位中断标志:,IF0,,关中断,STI,;置位中断标志:,IF1,,开中断,空操作指令,NOP,不执行任何操作,但占用一个字节存储单元,(指令指针,IP,1,),空耗一个指令执行周期,NOP,执行后,,CPU,继续执行其后指令,可以利用,NOP,实现软件延时,事实上,,NOP,和,XCHG AX,AX,的指令代码一样,机器码都是,90H,,都是执行一次空操作。,NOP,封锁前缀指令,LOCK,;封锁总线,这是一个指令前缀,可放在任何指令前,这个前缀使得在这个指令执行时间内,,8086,处理器的封锁输出引脚有效,即把总线封锁,使别的控制器不能控制总线;直到该指令执行完后,总线封锁解除,暂停指令,HLT,;进入暂停状态,暂停指令使,CPU,进入暂停状态,这时,CPU,不进行任何操作。当,CPU,发生复位或来自外部的中断时,,CPU,脱离暂停状态,HLT,指令可用于程序中等待中断。当程序中必须等待中断时,可用,HLT,,而不必用软件死循环。然后,中断使,CPU,脱离暂停状态,返回执行,HLT,的下一条指令,等待指令,WAIT,;进入等待状态,8086,利用,WAIT,指令和测试引脚实现与,8087,同步运行,浮点指令经由,8086,处理发往,8087,,并与,8086,本身的整数指令在同一个指令序列;而,8087,执行浮点指令较慢,所以,8086,必须与,8087,保持同步,第,5,章 指令系统总结,本章详细而完整地介绍了,8086,的,16,位指令系统的每条指令,希望大家进行一下整理(总结):,寻址方式,指令功能,指令支持的操作数形式,指令对标志的影响,通过复习整理,形成指令系统的整体概念,进而,掌握,常用指令,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服