收藏 分享(赏)

之控制转移ppt课件_1.ppt

上传人:微传9988 文档编号:2129000 上传时间:2018-09-01 格式:PPT 页数:47 大小:296.50KB
下载 相关 举报
之控制转移ppt课件_1.ppt_第1页
第1页 / 共47页
之控制转移ppt课件_1.ppt_第2页
第2页 / 共47页
之控制转移ppt课件_1.ppt_第3页
第3页 / 共47页
之控制转移ppt课件_1.ppt_第4页
第4页 / 共47页
之控制转移ppt课件_1.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、1,五 控制控制转移指令,控制转移指令分为: 转移指令 子程序调用和返回指令 循环控制指令 中断指令 处理器控制指令,2, 程序是指令的集合 指令代码在内存中顺序存放,但指令的执行不一定是顺序的 在Pentiun系列中,指令的地址由CS中的选择子和EIP两个寄存器决定。 CS和EIP两寄存器的内容决定了程序的流程,程序顺序执行和非顺序执行的概念,1 顺序执行CPU取来一条指令后,自动将IP的值加上该指令的字节数,使IP顺序指向下一条指令, CPU取来紧接着的指令执行。(此时IP的变化由CPU内部的硬件自动完成),3,通过控制转移指令改变CS和IP的值,使程序产 生分支、调用结构。例:比较(AX

2、)、(BX)的大小,将大数存于( max )单元。 CMP AX, BX JG great XCHG AX, BX great: MOV max, AX,2 非顺序执行,4,转移指令的实质:改变IP(或CS)的内容。 所有转移指令不会影响标志位。 分为无条件转移和条件转移两种。,1.转移指令,关于转移指令和调用指令的寻址,5,(1) 无条件转移指令 - JMP 本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。根据设置CS、IP的方法,JMP指令分成4种情况。 段内直接转移:指令中给出的8/16位的位移量加到IP。CS保持不变。 段内间接转移:REG/MEM中的16位偏移地址送IP

3、。CS保持不变。 段间直接转移指令中给出的16位的段和16位的偏移地址送到CS和IP。 段间间接转移MEM中给出的16位的段和16位的偏移地址送到CS和IP。,6,转移的目标地址由指令直接给出。 段内转移,故转移后CS内容保持不变,只改变IP的值。 汇编语言中格式 位移量 转移范围 JMP (SHORT) OPRD 8位 -128+127 JMP (NEAR PTR)OPRD 16位 -32768+32767 OPR-在汇编语言中使用符号地址。在机器语言中是一个相对于当前IP的位移量:例:JMP LPI ;转向LPIJMP BBB ;转向BBB, 段内直接转移,7,JMP NEXT 指令本身占

4、有两个字节操作码占一个字节;8位位移量占有一个字节,=1050H-1000H,源程序 :,条件转移指令:JMP,next,.,.,next:,MOV AL,03H,E9,50H,.,.,B0,03H,.,.,3000:1000H,3000:1050H,(IP),当前,D,8,=50H,(IP)=(IP)当前+D8,内存,例:代码段内有一条无条件转移指令,执行操作:(IP)(IP)当前+D8,qqq:,8,JMP SHORT OPR 8位位移量D8的范围在(-128 127) 之间,否则出错 JMP NEAR PTR OPR 指令本身占有三个字节,位移量为D16,占有两个字节,范围:-32768

5、+32767H。可以转移到段内的任一位置。,9,段内间接转移 转移的目标地址由寄存器或存储单元的内容给出。例1:JMP SI 若指令执行前(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处执行。,10,例2:JMP BX+DI 设指令执行前:(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H在汇编语言中,段内间接寻址通常写成:JMP WORD PTRBX+DI 表示所取得的目标地址是一个字。(只改变IP),11,段间直接转移 在指令中直接给出要转移到的目的段地址和偏移地

6、址。例:JMP 2000:1000H 执行时,(IP)1000H,(CS)2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FAR PTR。例:JMP FAR PTR far_label 其中的far_label为远类型的标号。,12,例:C1 SEGMENTJMP FAR PTR next_progC1 ENDSC2 SEGMINT next_prog: C2 ENDS,FAR 远属性标号, 标号与控制转移指令不在同一代码段中。,13,转移的目的地址(段和偏移)在两个相邻的字存储单元中。例如:JMP DWORD PTRSI 设指令执行前:(DS)=4000H,(SI

7、)=1212H,(41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到4B000H处开始执行指令。 例中的DWORD PTR表示转移地址是一个双字。,段间间接转移,14,4000,1212,+),41212,DS,SI,00,10,00,4A,41212 41213 41214 41215,1000,4A00,IP,CS,段间间接转移操作示意图,11111111,11101100,JMP DWORD PTR SI的机器码,DS:SI,15,条件转移指令根据标志位的状态或比较的结果来决定是否进行分支转移。 格式: JXX l

8、abel ;xx为条件名称缩写 8086指令的转移范围为-128+127字节。 Pentiun最大到-32768+32767,(2)条件转移指令 - JXX,条件转移指令可实现程序的条件分支。,16, 以单个状态标志作为转移条件助记符 转移条件, 以CX的值为0作为转移条件,按转移条件不同,条件转移指令可以分为四大类:,17,以两个无符号数比较的结果作为转移条件,以两个带符号数比较的结果作为转移条件,18,2 条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,,注意几点:,1 所有条件转移指令只能用段内直接寻址方式都是相对转移,范围(-128+127)或(-3276

9、8+32767) 。,3 条件转移指令不影响标志位,19,条件转移指令应用举例: 例1:以十六进制数形式显示BX中的内容。MOV BX, 1234HMOV CH, 4 ; CH做循环计数器 ROT: MOV CL, 4 ; CL做移位计数器ROL BX, CL ; 将最高4位移到低4位MOV AL, BLAND AL, 0FH ; 取出低4位ADD AL, 30H ; 转换为ASCII码CMP AL, 39H ; 与 9 比较JBE DISP ; 若(AL)9, 则转显示ADD AL, 7 ; 若(AL)9, 再加7转为A-F DISP: MOV DL, AL ; (DL)字符MOV AH,

10、2INT 21H ; 显示输出DEC CH ; 4个十六进制数显示完否?JNZ ROT ; 没有, 循环MOV DL, 48H ; HMOV AH, 2INT 21H ; 最后显示H,20,ASCII码,美国标准信息交换代码,21,例2:在8000H开始的长度为1000字节的字符串中查找S,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。MOV DI,8000HMOV CX,1000MOV AL, SMOV ADDR,0FFFFH GOON: SCASBLOOPNZ GOONJNZ DONE DEC DIMOV ADDR,DIDONE: HLT,22,2.子程序调用和返

11、回指令,特点 调用子程序时,IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(CS)。 子程序执行结束后一般均要返回调用程序。 一次定义,多次调用; 可带参数调用,以完成不同的功能。,子程序 (过程)一段具有特定功能的,供其它程序调用的公用程序,两条相关指令:子程序调用指令 CALL子程序返回指令 RET,优点程序代码短,结构清晰,便于编程、调试、修改和阅读。,23,NEAR:调用指令CALL与过程在同一个代码段中,过程程序中具有独立功能的部分编写成独立程序模块。,过程定义格式:过程名 PROC 类型RET过程名 ENDP,CALL指令和RET指令都不影响条件码。,过

12、程有两种类型:按过程与调用语句间的位置,FAR: 调用指令CALL与过程不在同一个代码段中,24,例: NEAR 类型过程 code1 SEGMENT ;code段CALL subp ;调用 指令 YYY: MOV BX,AX subp PROC NEAR ;过程定义 RET ;返回 subp ENDP code1 ENDS,25,一般格式:CALL sub ;sub为子程序的入口 子程序调用有两类。 段内调用 段间调用 段内直接调用 子程序的偏移地址直接由CALL指令给出。 格式:CALL NEAR PTR DST CALL执行时:首先将当前IP内容(返回地址)压栈,然后把机器指令中给出的位

13、移量加到 IP上,转到子程序的入口处去执行。注: 返回地址- CALL指令的下一条指令的首地址。,(1)调用指令CALL,26,例: 段内直接调用 code1 SEGMENT ;code段CALL subp ;调用 指令 YYY: MOV BX,AX subp PROC NEAR ;过程定义 RET ;返回 subp ENDP code1 ENDS 问题:本例中的返回地址?,27,子程序的偏移地址在寄存器或存储器中。 格式:CALL mem16/reg16 CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP。 例:CALL AX ;调用地址由AX给出 CALL WO

14、RD PTRSI ;调用地址由存储器给出,段内间接调用,28,IPH IPL,代码段,数据段,对于 CALL WORD PTR SI这条指令 若:(DS) = 8000H,(SI) = 1200H 则指令操作图示如下。,81200H,81201H,29,子程序的段地址和偏移地址直接由CALL指令给出。 格式:CALL FAR PTR DST; 执行操作:SP(SP)-2(SP)-1,(SP)-2)(CS) ;返回地址的段地址入栈SP(SP)-2(SP)-1,(SP)-2)(IP) ;返回地址的偏移地址入栈(IP)DST偏移地址(CS)DST段地址,段间直接调用,30,CSEG1 SEGMENT

15、CALL FAR PTR PPP;AAA处的CS:IP入栈,转PPPAAA: CSEG1 ENDSCSEG2 SEGMENTPPP PROC FAR RETPPP ENDPCSEG2 ENDS,段间直接调用举例,31,子程序的段和偏移地址为存储器的连续4个单元中的内容。 格式:CALL mem32 指令的操作为:SP(SP)-2(SP)+1,(SP)(CS) ;返回地址的段地址入栈SP(SP)-2(SP)+1,(SP)(IP) ;返回地址的偏移地址入栈CS(mem32+2)IP(mem32)例:CALL DWORD PTRDI 调用地址在DI,DI+1,DI+2,DI+3四个存储单元中。低字内

16、容为偏移地址,高字内容为段地址。,段间间接调用,32,CALL,代码段,数据段,IPH IPL,CSH CSL,DI,DI+1,DI+2,DI+3,段间间接调用示意图,CALL DWORD PTRDI,33,段内返回指令RET的操作为:IP(SP)+1,(SP) ;栈顶内容弹出到IPSP(SP)+2 段间返回指令RET的操作为:IP(SP)+1,(SP) ;栈顶内容弹出到IPSP(SP)+2CS(SP)+1,(SP) ;栈顶内容弹出到CSSP(SP)+2带立即数返回指令:RET N ; N为偶数 执行操作:从栈顶弹出返回地址后,再使SP的值加N。例:RET 4,(2)返回指令RET(子程序中的

17、最后一条指令),34,例如:RET N 堆栈使用情况: CODE SEG MENTASSUME CS:CODE,DS:DATAMAIN PROC FAR START: MOV AX,DATA MOV DS,AX PUSH BX PUSH CXCALL DELCHAR QQQ: MOV AH,4CH INT 21HMAIN ENDP DELCHAR PROC NEAR RET 4 DELCHAR ENDPCODE ENDSEND START,(BX),(SP),(CX),QQQ的偏移地址,PUSH BX,PUSH CX,CALL DELCHAR,RET 4,RET 4 堆栈使用情况:,35,3.

18、循环控制指令,用在循环程序中以确定是否要继续循环。 循环次数通常置于CX中。 转移的目标应在距离本指令-128+127或-32768+32767的范围之内。 循环控制指令不影响标志位。,36,(2)LOOPZ (LOOPE) 格式:LOOPZ label 操作:(CX)-1CX;若(CX)0ZF=1,则转至label处执行;否则退出循环,执行LOOP后面的指令。,(1)LOOP 格式:LOOP label 操作:(CX)-1CX;若(CX)0,则转至label处执行;否则退出循环,执行LOOP后面的指令。LOOP指令与下面的指令段等价:DEC CXJNZ label,37,(3)LOOPNZ

19、(LOOPNE) 格式:LOOPNZ label 操作:(CX)-1CX;若(CX)0ZF=0,则转至label处执行;否则退出循环,执行LOOP后面的指令。循环指令的例子见下页。,38,例1:给1A000H开始的256个内存单元均减去1,若 发现某个单元减为0则立即退出循环,其后的单元不再减1。MOV AX,1A00HMOV DS,AXMOV DI,0MOV CX,256 GOON: DEC BYTE PTRDIINC DICMP BYTE PTRDI-1,0LOOPNZ GOONHLT,39,例2:在40个元素构成的数组中,寻找第一个非零元素MOV CX,40;MOV SI,0FFH; N

20、EXT:INC SI;CMP BYTE PTR SI,0;LOOPZ NEXT; (CX)0ZF=1当前元素为0且未找完时,继续寻找JNZ OKK;退出循环有两种情况:ZF=0,找到非零元素或CX=0:整个数组已找完,未找到非零元素,此时ZF=1CALL DISPLAY;未找到非零元素的处理RET OKK: . ;找到非0元素的处理RET,40,4.中断指令,CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫软中断。 中断指令共有三条:(1)INT n 执行类型n的中断服务程序,N=0255(2)INTO 执行溢出中断的中断服务程序(3)IRET/IRETD 从中断服务程序返回调

21、用程序,41,(1)INT n ;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指令可用于调用系统服务程序,如INT 21H,

22、42,(2)溢出中断INTOINTO检查溢出标志OF,如果OF=1,则启动一个类型4的中断过程;如果OF=0,不做任何操作。通常INTO指令安排在有符号数算术运算指令后面。如IMUL DXINTO ;若溢出,则启动INT 4,否则继续MOV RESULT,AXMOV RESULT+2,DX,43,用于从中断服务程序返回被中断的程序。 任何中断服务程序不管是外部中断引起的,还是内部中断引起的,最后都要用IRET返回。该指令执行的操作为:IP(SP)+1,(SP) ;栈顶内容弹出到IPSP(SP)+2CS(SP)+1,(SP) ;栈顶内容弹出到CSSP(SP)+2FLAGS(SP)+1,(SP)

23、;栈顶内容弹出到FLAGSP(SP)+2,(3)中断返回指令IRET/IRETD,44,3.3.6 处理器控制指令,1.标志操作指令用来设置标志位的状态。(1)CF设置指令CLC 0CFSTC 1CFCMC CF变反(2)DF设置指令CLD 0DF (串操作的指针移动方向从低到高)STD 1DF (串操作的指针移动方向从高到低)(3)IF设置指令CLI 0IF (禁止INTR中断)STI 1IF (开放INTR中断),45,格式 : HLT 执行 : 使CPU处于暂停状态, CS:IP指向HLT后面的一条指令的的地址。 作用: 用于等待外部中断,中断处理结束后,继续执行HLT后的下一条指令 例 : 、STI ;允许外部中断 HLT ;等待中断 SSS: MOV AX, 0、复位信号也可让CPU退出暂停状态。 HLT不影响标志位。,2. 外部同步指令,(1)暂停指令HLT,46,(2)空操作指令NOP,NOP指令不做任何实质性的操作,但占用3个时钟周期,然后执行下一条指令。 多用于延时。,(3)总线封锁指令,LOCK实际上是一个指令前缀,可以放在任何一条指令前面。 用来维持总线的锁存信号直到与其联合的指令执行完; CPU与其他协处理器协同工作时,可以避免破坏有用信息。,47,控制转移指令小结,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报