第三章80X86指令系统13课件.ppt

上传人(卖家):晟晟文业 文档编号:5105089 上传时间:2023-02-11 格式:PPT 页数:74 大小:375KB
下载 相关 举报
第三章80X86指令系统13课件.ppt_第1页
第1页 / 共74页
第三章80X86指令系统13课件.ppt_第2页
第2页 / 共74页
第三章80X86指令系统13课件.ppt_第3页
第3页 / 共74页
第三章80X86指令系统13课件.ppt_第4页
第4页 / 共74页
第三章80X86指令系统13课件.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

1、1(Control transfer instructions)(一)、(一)、2无条件地将控制转移到指令中规定的目的地无条件地将控制转移到指令中规定的目的地目标地址可以是:直接方式目标地址可以是:直接方式/间接方式给出。间接方式给出。JMP指令不影响标志位。指令不影响标志位。转移分成两类:段内或段间转移。转移分成两类:段内或段间转移。无条件转移指令有五种格式:无条件转移指令有五种格式:q 段内直接短转移段内直接短转移q 段内直接近转移段内直接近转移q 段内间接转移段内间接转移q 段间直接远转移段间直接远转移q 段间间接转移段间间接转移3汇编程序设计中常利用条件转移指令来实现分支。汇编程序设计

2、中常利用条件转移指令来实现分支。操作数必须是短标号。操作数必须是短标号。JZ(JE)/JNZ(JNE),),JS/JNS,JO/JNO,JP(JPE)/JNP(JPO),JB(JNAE、JC)/JNB(JAE、JNC),),JB(JNAE、JC)/JNB(JAE、JNC),),JBE(JNA)/JNBE(JA)JL(JNGE)/JNL(JGE),),JLE(JNG)/JNLE(JG)JCXZ4 如果有一些程序段在不同地方反复出现,可以将这些程序如果有一些程序段在不同地方反复出现,可以将这些程序段设计成为过程(子程序)供调用。过程结束,返回调用处。段设计成为过程(子程序)供调用。过程结束,返回调

3、用处。过程调用指令和返回指令过程调用指令和返回指令(1)、CALL(Call a procedure)调用调用 CALL调用指令调用指令 段内直接调用段内直接调用段间直接调用段间直接调用 段内间接调用段内间接调用段间间接调用段间间接调用(2)、RET(Reture from procedure)返回返回 RET返回指令返回指令段内返回段内返回段间返回段间返回 段内带立即数返回段内带立即数返回段间带立即数返回段间带立即数返回5 循环控制指令用于使一些程序段反复执行形成循环程序循环控制指令用于使一些程序段反复执行形成循环程序。循环控制指令有三种:循环控制指令有三种:(1)、LOOP (Loop)循

4、环指令循环指令(2)、LOOPE/LOOPZ (Loop if equal/Loop if zero)当相等当相等/为为“0”循环循环(3)、LOOPNE/LOOPNZ (Loop if not equal/Loop if not zero)当不相等当不相等/不为不为“0”循环循环6 8086/8088CPU 可以在程序中安排一条中断指令引起可以在程序中安排一条中断指令引起中断过程中断过程,这种中断称为,这种中断称为软中断软中断。(1)、INT(Interrupt)(2)、INTO(Interrupt if overflow)(3)、IRET(Interrupt Return)78(Contr

5、ol transfer instructions)转移转移将程序控制从一处转换到另一处的最直接方法。将程序控制从一处转换到另一处的最直接方法。在在CPU内部,转移是通过将目标地址传送给内部,转移是通过将目标地址传送给CS:IP来实现的。来实现的。9q 先介绍控制和非控制转移指令的概念先介绍控制和非控制转移指令的概念 非控制转移指令非控制转移指令:指令本身对指令本身对CS和和IP均无操作,形成顺序均无操作,形成顺序 执行结构。执行结构。顺序执行结构:顺序执行结构:顺序存放,顺序执行顺序存放,顺序执行 控制转移指令控制转移指令:以以CS和和IP为主要操作对象,为主要操作对象,改变改变CS和和IP寄

6、存器的值,寄存器的值,就改变了程序执行的流程。就改变了程序执行的流程。10在在8086/8088中,指令的地址固定由中,指令的地址固定由CS和和IP两个寄存器决定。两个寄存器决定。CS和和IP两寄存器的内容决定了程序的流程两寄存器的内容决定了程序的流程,q ,CS =FFFFH,IP =0 故故 第一条指令在内存的第一条指令在内存的ROM区。区。q CPU取来一条指令后,取来一条指令后,自动将自动将IP的值加上该指令的字节数,的值加上该指令的字节数,使使IP顺序指向下一条指令,顺序指向下一条指令,CPU取来紧接着的指令执行。取来紧接着的指令执行。(此时此时IP的变化由的变化由CPU内部的硬件自

7、动完成内部的硬件自动完成)11 控制转移指令改变控制转移指令改变CS和和IP的值,的值,使程序产生分支、调用结构。使程序产生分支、调用结构。例:比较例:比较 AX、BX 的大小,将大数存于(的大小,将大数存于(max)单元)单元 CMP AX,BX great XCHG AX,BX great:MOV max,AX12JMP(jmp)跳转指令。)跳转指令。JMP指令必须指定转移的目标地址(或转向地址)。指令必须指定转移的目标地址(或转向地址)。转移分成两类:段内或段间转移。转移分成两类:段内或段间转移。段内转移:只要改变段内转移:只要改变IPIP寄存器的内容寄存器的内容 指在同一段的范围之内进

8、行转移指在同一段的范围之内进行转移 即用新的转移目标地址代替原有的即用新的转移目标地址代替原有的IP值。值。段间转移:要修改段间转移:要修改IPIP、CSCS寄存器的内容寄存器的内容 转到另一段去执行程序。转到另一段去执行程序。即即转移目标地址转移目标地址=新的段地址和偏移地址两部分组成新的段地址和偏移地址两部分组成。13段内直接短转移:段内直接短转移:格式:格式:JMP SHORT OPR OPR在汇编语言中使用符号地址。在汇编语言中使用符号地址。在机器语言中存放位移量在机器语言中存放位移量D8位移量位移量D8=符号地址的偏移地址符号地址的偏移地址-当前当前IP的值的值 执行操作:执行操作:

9、IP IP 当前当前+D8 SHORT 短属性标号短属性标号8位位移量位位移量D8的范围在(的范围在(-128 127)之间)之间,占有一个字节。,占有一个字节。而指令本身占有两个字节。而指令本身占有两个字节。14例如:代码段内有一条无条件转移指令,在汇编语言中使用符号例如:代码段内有一条无条件转移指令,在汇编语言中使用符号地址地址JMP SHORT NEXT指令执行过程:指令执行过程:NEXT在汇编语言中使用符号地址在汇编语言中使用符号地址 IP IP当前当前+D8源程序:源程序:条件转移指令:JMP SHORT 条件转移指令:JMP SHORT nextnext.next:next:MOV

10、 AL,03HMOV AL,03HOPOP50H50H.OPOP03H03H.3000:1000H3000:1000H3000:1050H3000:1050H(IP)(IP)当前当前D D8 8=50H=50H=1050H-1000H=1050H-1000H(IP)=(IP)当前+D8(IP)=(IP)当前+D8内存内存15 段内直接近转移:段内直接近转移:格式:格式:JMP NEAR PTR OPR OPR在汇编语言中使用符号地址在汇编语言中使用符号地址。在机器语言中存放位移量在机器语言中存放位移量D16位移量位移量D16=符号地址的偏移地址符号地址的偏移地址 -当前当前IP的值的值 执行操

11、作:执行操作:IP IP 当前当前+D16 NEAR近属性标号近属性标号位移量为位移量为D16范围:范围:-32768+32767H,占有两个字节。,占有两个字节。而指令本身占有三个字节。而指令本身占有三个字节。可以转移到段内的任一位置。可以转移到段内的任一位置。过程:如同过程:如同SHORT,只是位移量为,只是位移量为D16范围范围-32768+32767H,占有两个字节。占有两个字节。16 段内间接转移段内间接转移:CS 不变,只改变不变,只改变 IP 格式:格式:JMP WORD PTR OPROPR 为为16位寄存器、位寄存器、或存储器(除立即数以外的任何一种寻址方式)或存储器(除立即

12、数以外的任何一种寻址方式)执行操作:执行操作:IP (EA)或或 IP reg16指令格式举例:指令格式举例:JMP AXJMP SIJMP TABLE BX;操作数已定义为操作数已定义为16位存储器位存储器JMP ALPHA_WORD;操作数已定义为;操作数已定义为16位存储器位存储器JMP WORD PTR BPDI17例:例:DS =1000H,BX=1000H,CX=5000H,CS=3000H (11000H)=1234H,(11002H)=5678HJMP CX;IP=5000HJMP WORD PTR BX;CS=3000H,IP=1234H(PA)=(16d DS+BX)=(1

13、1000H)=1234H 18 段间直接(远)转移:段间直接(远)转移:(CS)、(IP)都改变都改变 格式:格式:JMP FAR PTR OPR;OPR在汇编语言中使用符号地址。在汇编语言中使用符号地址。符号地址与指令不在同一个段里。符号地址与指令不在同一个段里。在机器语言中则要指定转向地址的偏移地址和段地址在机器语言中则要指定转向地址的偏移地址和段地址执行操作:执行操作:IP OPR所在的段内偏移地址。所在的段内偏移地址。CS OPR所在的段的段址。所在的段的段址。而指令本身占有而指令本身占有5个字节:个字节:用用2个字分别存放符号地址的段值、偏移值,个字分别存放符号地址的段值、偏移值,用

14、用1个字节存放操作码。个字节存放操作码。19FAR 远属性标号远属性标号,标号与控制转移指令不在同一段中。标号与控制转移指令不在同一段中。在汇编语言中,在机器语言中存放如下:在汇编语言中,在机器语言中存放如下:例:例:C1 SEGMENT JMP FAR PTR next_prog C1 ENDS C2 SEGMINT next_prog:C2 ENDS2000:0250HE AE A5 05 00 20 20 00 02 02 0OPOP码码新新(IP)=0250H(IP)=0250H新新(CS)=2000H(CS)=2000HJMPJMP指令指令C1C1段段C2C2段段20000H2000

15、0Hnext_prog:next_prog:20250H20250H20 段间间接转移:段间间接转移:(CS)、(IP)都改变都改变格式:格式:JMP DWORD PTR OPR OPR 使用存储器使用存储器(除立即数和寄存器以外的任何一种寻址方式)(除立即数和寄存器以外的任何一种寻址方式)执行操作:执行操作:IP(EA)CS(EA+2)例:已知例:已知 BX=1000H,SI=2000H ,DS=2000H(23000H)=2211H,(23002H)=4433HJMP DWORD PTR BXSI则:则:BX+SI=3000H IP=(PA)=(16d(DS)+(BX)+(SI)=(230

16、00H)=2211H CS=(PA+2)=4433H21(2)Jcc 条件转移指令条件转移指令 根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移(10种种)JZ(JE)/JNZ(JNE),JP(JPE)/JNP(JPO),JS/JNS,JO/JNO,JC/JNC 根据两个无符号数比较结果转移(根据两个无符号数比较结果转移(4种)种)JB(JNAE)/JNB(JAE),JBE(JNA)/JNBE(JA)比较两个带符号数,并根据比较结果转移(比较两个带符号数,并根据比较结果转移(4种)种)JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)22指令格式:指令格式:J

17、cc OPR操作:根据上一条指令所设置的操作:根据上一条指令所设置的条件码条件码来判别测试条件转移。来判别测试条件转移。每一种条件转移指令都有它的测试条件。每一种条件转移指令都有它的测试条件。满足条件时满足条件时:IP IP 当前当前+使用相对寻址方式,范围使用相对寻址方式,范围-128+127个字节个字节 即条件转移指令都是即条件转移指令都是“直接短转移直接短转移”不满足条件时:不满足条件时:IP 不变,顺序执行下一条指令不变,顺序执行下一条指令23 所有条件转移指令都是所有条件转移指令都是相对转移形式相对转移形式,范围(范围(-128+127)。)。当需往一个较远地方进行条件转移时,当需往

18、一个较远地方进行条件转移时,选用条件转移转到附近一个单元,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。然后,再用无条件转移转到较远的目的地。条件转移指令中,相当一部分指令是在条件转移指令中,相当一部分指令是在比较比较完二个数大完二个数大小后,根据结果而决定是否转移,小后,根据结果而决定是否转移,条件转移指令不影响标志位条件转移指令不影响标志位24按转移条件不同,条件转移指令可以分为四大类:按转移条件不同,条件转移指令可以分为四大类:以单个状态标志作为转移条件助记符以单个状态标志作为转移条件助记符 转移条件转移条件 以以CX的值为的值为0作为转移条件作为转移条件JCXZC

19、X=025JA/JNBECFZF=0高于高于/JAE/JNBCF=0 高于等于高于等于/JB/JNAECF=1 /不高于等于不高于等于JBE/JNACFZF=1/不高于不高于以两个无符号数比较的结果作为转移条件以两个无符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件JG/JNLE(SF OF)ZF=0大于大于/JGE/JNL SF OF=0 大于或等于大于或等于/JL/JNGE SF OF=1 /不大于等于不大于等于JLE/JNG(SF OF)ZF=1/不大于不大于26条件转移指令应用条件转移指令应用 例:比较二个数是否相等例:比较二个数是否

20、相等 如相等做动作如相等做动作1 否则做动作否则做动作2 CMP AX,BX Action_2:或或 CMP AX,BX action_1:27例:例:两个数放在两个数放在X,Y单元里,单元里,(带符号数判断带符号数判断)先判先判X50,YEStoo_high,NO 做做X-Y,溢出溢出overflow,否则求,否则求|X-Y|result MOV AX,X CMP AX,50 JG too_high ;大于转大于转too_highSUB AX,YJO overflow ;溢出转溢出转overflowJNS nonneg ;S=0转转nonneg NEG AX nonneg:MOV resul

21、t,AX too_high:overflow:28 例:在存储器中有一个首地例:在存储器中有一个首地址为址为array的的N个个字的字的数组,要数组,要求测试其中正数、求测试其中正数、0及负数的及负数的个数个数.(带符号数判断带符号数判断)正数个数放在正数个数放在:DI 中,中,0的个数放在的个数放在:SI 中,中,负数个数负数个数N-DI-SI 送送AX 如果没有负数转如果没有负数转skip,如果有负数转如果有负数转neg_val程序:程序:mov cx,N ;N字数组字数组 mov bx,0 mov di,bx mov si,bx again:cmp word ptr arrarybx,0

22、 jle less_or_ag inc di ;正数个数正数个数jmp short neat less_or_ag:jl neat inc si ;0的个数的个数neat:add bx,2dec cx jnz again mov ax,Nsub ax,disub ax,sijz skip ;没有负数没有负数jmp near ptr neg_val;有负数有负数skip:neg_val:292、过程过程(子程序子程序)调用指令调用指令过程过程程序中具有独立功能的部分编写成独立程序模块。程序中具有独立功能的部分编写成独立程序模块。过程(子程序)定义过程(子程序)定义格式:格式:符号名符号名 PRO

23、C 类型类型 符号名符号名 ENDP 子程序调用和返回指令:子程序调用和返回指令:过程有两种类型:过程有两种类型:按过程与调用语句间的位置,过程有两种类型。按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中类型:调用指令与过程不在同一个段中CALL指令和指令和RET指令都不影响条件码。指令都不影响条件码。30(1)、)、CALL(Call a procedure)调用调用 CALL调用指令调用指令调用地址由指令给出调用地址由指令给出CALL调用指令有调用指令有4 4种:种:段内直接调用段内直

24、接调用段间直接调用段间直接调用 段内间接调用段内间接调用段间间接调用段间间接调用31 段内直接调用段内直接调用格式:格式:;SP SP -2,(SP+1),(SP)IP ;IP IP+D16 DST给出转向地址(子程序的入口地址)。给出转向地址(子程序的入口地址)。D16机器指令中的位移量(转向地址和返回地址之差)机器指令中的位移量(转向地址和返回地址之差)位移量为位移量为D16范围范围-32768+32767H,占有两个字节。,占有两个字节。32工作过程如下:工作过程如下:例:例:过程过程 code SEGMENT ;code段段 CALL subp ;指令指令YYY的的IP入栈入栈,D16

25、 =subp-yyy XXX:PROC NEAR ;过程定义过程定义 RET ;返回返回 subp ENDP code ENDS33 段内间接调用:段内间接调用:格式:格式:CALL DST WORD PTR OPR OPR 为为16位寄存器,或存储器位寄存器,或存储器 (除立即数以外的任何一种寻址方式)(除立即数以外的任何一种寻址方式)SP SP -2 (SP+1),(SP)IP IP(EA)EA由由DST寻址方式所确定的有效地址。寻址方式所确定的有效地址。34 段间直接调用:段间直接调用:格式:格式:CALL FAR PTR DST SP SP -2 SP SP -2 35例例:CSEG1

26、 SEGMENT CALL FAR PTR subp ;a处的处的CS:IP入栈入栈,转转subp a:CSEG1 ENDSCSEG2 SEGMENT subp PROC RET subp ENDP CSEG2 ENDS36 段间间接调用:段间间接调用:格式:格式:CALL DWORD PTR DST执行操作:执行操作:SP SP -2 SP SP-2 EA由由DST的寻址方式确定的有效地址。的寻址方式确定的有效地址。37(2)、RET(Reture from procedure)返回返回 RET返回指令返回指令放在过程放在过程(子程序子程序)的末尾的末尾使过程使过程(子程序子程序)在功能完成

27、后返回调用程序继续执行在功能完成后返回调用程序继续执行*为能准确返回,返回指令类型与调用指令类型相对应为能准确返回,返回指令类型与调用指令类型相对应。段内返回段内返回段间返回段间返回 段内带立即数返回段内带立即数返回段间带立即数返回段间带立即数返回返回时:将返回地址出栈返回时:将返回地址出栈 IP(段内或段间)(段内或段间)CS(段间)(段间)38段内返回:段内返回:格式:格式:RET 机器码:机器码:C3H或者或者C2H IP (SP+1),(,(SP)SP SP +2段间返回:段间返回:格式:格式:RET 机器码:机器码:CBH或或CAH IP (SP+1),(SP)SP SP +2 CS

28、 (SP+1),(,(SP)SP SP +239段内带立即数返回段内带立即数返回格式:格式:RET imm16执行操作:执行操作:IP (SP+1),(SP)SP SP +2 40例如:例如:RET imm16 堆栈使用情况堆栈使用情况 ASSUME CS:CODE,DS:DATA MAIN PROC FAR START:MOV AX,DATA MOV DS,AX PUSH BX PUSH CX CS:XXXX MOV AH,4CH INT 21H MAIN ENDP DELCHAR PROC DELCHAR ENDP END STARTRET imm16 堆栈使用情况堆栈使用情况 41 段间

29、带立即数返回:段间带立即数返回:格式:格式:RET EXP IP (SP+1),(SP)SP SP +2 CS (SP+1),(SP)SP SP+2 SP SP +D16 CALL指令和指令和RET指令都不影响条件码。指令都不影响条件码。42另一个代码段另一个代码段 PRO-A PROC PRO-B PROC CALL near ptr PRO-B CALL near ptr PRO-C(IP)=2500H (IP)=4000H CALL near ptr PRO-C RET(IP)=3700H PRO-C PROC RET RET 例例:学习使用学习使用 段内、段间直接调用指令的使用及堆栈情

30、况段内、段间直接调用指令的使用及堆栈情况主程序主程序 MAIN在一个代码段中在一个代码段中子程序子程序 PRO-A PRO-B PRO-C 在另一个代码段在另一个代码段程序调用关系程序调用关系:(SP)=0100H MAINCALL far ptr PRO-A(CS)=0500H(IP)=1000H 43栈顶TOS栈顶TOS0100H0100H0500H0500H1000H1000H00FCH00FCH0500H0500H1000H1000H2500H2500H00FAH00FAHSPSP(1)(1)SPSPTOSTOSSPSP(2)(2)(3)(3)TOSTOS4000H4000H2500H

31、2500H1000H1000H0500H0500H00F8H00F8H4000H4000H2500H2500H1000H1000H0500H0500H4000H4000H2500H2500H1000H1000H00FAH00FAH0500H0500H00FCH00FCHTOSTOSTOSTOSTOSTOSSPSPSPSPSPSP(4)(4)(5)(5)(6)(6)4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H05

32、00H00FAH00FAH00FCH00FCH0100H0100HTOSTOSSPSPSPSPSPSP(9)(9)(8)(8)(7)(7)TOSTOSTOSTOS堆栈情况:堆栈情况:44操作数操作数执行操作执行操作符号地址符号地址 (SHORT)IP IP 当前当前+8位位移量位位移量符号地址符号地址(NEAR属性属性)IP IP 当前当前+16位位移量位位移量reg (16位)或位)或 mem (DW类型类型)IP reg 或或 IP (mem)符号地址符号地址(FAR属性属性)IP 符号地址的偏值符号地址的偏值 CS 符号地址的段值符号地址的段值mem (DD类型类型)IP (mem),C

33、S (mem+2)当前当前IP的值为控制转移指令下一条指令的偏移地址。的值为控制转移指令下一条指令的偏移地址。位移量位移量=符号地址的偏移量符号地址的偏移量-当前当前IP的值。的值。符号地址(目标地址)符号地址(目标地址)=当前当前IP的值的值+位移量位移量 指令格式:指令格式:JMP 操作数操作数 45由由CS是否变化、以及操作数类型决定情况如下表是否变化、以及操作数类型决定情况如下表转移方式转移方式CS操作数操作数跳转范围跳转范围段内直接短段内直接短 方方 式式不变不变符号地址符号地址(SHORT)-128 127即即0FFH段内直接近段内直接近 方方 式式不变不变符号地址符号地址(NEA

34、R属性属性)一个段内一个段内0FFFFH段段 内间接方式内间接方式不变不变Reg mem(DW类型类型)一个段内一个段内0FFFFH段段 间直接方式间直接方式变变符号地址符号地址(FAR属性属性)整个内存整个内存0FFFFFH段段 间间接方式间间接方式变变mem(DD类型类型)整个内存整个内存0FFFFFH46 各控制转移指令允许使用的转移方式各控制转移指令允许使用的转移方式转移方式转移方式无条件转移无条件转移JMP条件转移条件转移Jcc循环转移循环转移LOOPxx 子程调用子程调用CALL段内直接短段内直接短 方方 式式 段内直接近段内直接近 方方 式式段段 内间接方式内间接方式段段 间间

35、直接方式直接方式段段 间间接间间接47例例 :JMP again ()JMP BX()JMP WORD PTR BX()JMP DWORD PTR BX()JZ AX ()LOOP BX()JNZ next (?)(若若 next的位移量超出的位移量超出-128127)指令指令JMP、CALL、Jcc、LOOPxx本身对标志无影响本身对标志无影响。483、循环控制指令、循环控制指令格式格式:LOOPxx符号地址符号地址 执行执行 操作操作 :CX CX-1 此此操作不影响标志操作不影响标志 检查转移条件检查转移条件xx,满足转向目标地址去执行,满足转向目标地址去执行;不满足执行不满足执行LOO

36、Pxx后一条指令后一条指令转移方式转移方式 只允许段内直接短方式,跳转范围只允许段内直接短方式,跳转范围-128127助记符助记符转移条件转移条件不转移条件不转移条件LOOPCX0CX=0LOOPZCX0且且ZF=1CX=0或或ZF=0LOOPNZCX0且且ZF=0CX=0或或ZF=149与条件转移指令不同的是:与条件转移指令不同的是:循环指令隐含循环指令隐含(CX)减操作。减操作。例:用循环指令将例:用循环指令将BL寄存器的内容按二进制形式显示出来寄存器的内容按二进制形式显示出来学习:学习:LOOP指令指令MOV CX,8 next:ROL BL,1 MOV DL,BL AND DL,000

37、0 0001B ADD DL,0011 0000B MOV AH,2 INT 21H DEC CX JNZ nextLOOP next50循环指令说明:循环指令说明:LOOP退出循环条件是退出循环条件是 CX=0 LOOPZ和和LOOPNZ提供了提前结束循环的可能提供了提前结束循环的可能,不一定要等到不一定要等到 CX=0才退出循环。才退出循环。例:查找字符:例:查找字符:在串中查找字符,查到了,就可退出,在串中查找字符,查到了,就可退出,可用可用LOOPNZ,不相等时继续查找。,不相等时继续查找。比较两串时,当有字符不等,就可退出,说明两字符串不等。比较两串时,当有字符不等,就可退出,说明两

38、字符串不等。可用可用LOOPZ,当相等时继续比较。,当相等时继续比较。执行完执行完 LOOPNZ或或LOOPZ后,根据后,根据ZF标志的值判断结果标志的值判断结果对查找字符,对查找字符,ZF=1,说明找到;否则没有找到。说明找到;否则没有找到。对串比较,对串比较,ZF=1,说明两串相等;否则不等。说明两串相等;否则不等。51例:检查当前数据段所在的例:检查当前数据段所在的64K64K字节内存是否能够正确地字节内存是否能够正确地进行读写操作。可先向每个字节写入数据进行读写操作。可先向每个字节写入数据01010101B01010101B,然,然后读出来进行比较。如正确则转至目标标号后读出来进行比较

39、。如正确则转至目标标号OKOK的程序段,的程序段,否则进入出错处理程序段否则进入出错处理程序段ERRORERROR。MOV CX,0000H MOV BX,0000H MOV AL,01010101HAGAIN:MOV BYTE PTRBX,AL INC BX CMP BYTE PTRBX-1,AL LOOPZ AGAIN JCXZ OKERROR:.;出错处理出错处理 .OK:.;读写正确读写正确52 例:例:在在string字符串中查找空格字符,串长度为字符串中查找空格字符,串长度为N。用条件转移:用条件转移:JZ MOV CX,N MOV AX,SEG string MOV DS,AX

40、LEA BX,string MOV AL,20H next:CMP AL,BX JZ find INC BX DEC CX JNZ next 未找到处理未找到处理 Find:找到处理找到处理 修改偏址修改偏址BXYNAL 关键字关键字CX 串长度串长度NDS:BX 串首址串首址判判BX是关键字?是关键字?(CX)(CX)-1找到处理找到处理未找到处理未找到处理 (CX)=0?YN结束出口结束出口53用条件转移:用条件转移:JZ MOV CX,N MOV AX,SEG string MOV DS,AX LEA BX,string MOV AL,20H next:CMP AL,BX JZ find

41、 INC BX DEC CX JNZ next 未找到处理未找到处理 JMP exit find:找到处理:找到处理exit:结束出口:结束出口用循环指令用循环指令:LOOP NZ next MOV CX,NMOV AX,SEG stringMOV DS,AXLEA BX,string MOV AL,20H DEC BXnext:INC BX CMP AL,BX LOOPNZ nextJZ find未找到处理未找到处理 JMP exit find:找到处理找到处理exit:结束出口结束出口54思考:思考:去掉指令去掉指令JMP exit,程序执行结果会怎样?,程序执行结果会怎样?执行完执行完L

42、OOPNZ后,可否根据后,可否根据CX=0来来判断查找结果判断查找结果?有人认为有人认为CX=0,即,即说明没找到说明没找到,对吗?,对吗?55 MOV CX,28H MOV SI,0FFHNEXT1:INC SI CMP BYTE PTR SI,0 LOOPZ NEXT1 ;当;当Z=1、(、(CX)0循环;循环;当当Z=0,或(,或(CX)=0结束循环。结束循环。JNZ OKK ;当找到非零元素转;当找到非零元素转OKK。CALL DISPLAY1;当找不到非零元素转;当找不到非零元素转DISPLAY1OKK:CALL DISPLAY2用用LOOPZ和和LOOPNZ指令提供提前结束循环的可

43、能性。指令提供提前结束循环的可能性。有时需要字符串中查找一个字符,找到后可提前结束循环,有时需要字符串中查找一个字符,找到后可提前结束循环,用用LOOPZ、LOOPNZ来处理。来处理。例:例:40个元素构成的数组,找出第一个非零元素。个元素构成的数组,找出第一个非零元素。DISPLAY1 RETDISPLAY2 RET564、中断指令、中断指令q 中断(中断(Interrupt):):有时当系统运行或程序运行期间遇到某些特殊情况,有时当系统运行或程序运行期间遇到某些特殊情况,需要计算机自动执行一组专门的例行程序来进行处理。需要计算机自动执行一组专门的例行程序来进行处理。q 中断例行程序(或中断

44、子程序)(中断例行程序(或中断子程序)(Interrupt routine):所执行的这组程序就称为中断子程序。所执行的这组程序就称为中断子程序。q 种类:种类:中断分为内部(软)中断和外部(硬)中断两种。中断分为内部(软)中断和外部(硬)中断两种。内部中断内部中断如除法运算中除数为如除法运算中除数为0、中断指令引起的中断、中断指令引起的中断 外部中断外部中断处理处理I/O设备与设备与CPU之间的通信。之间的通信。57q CPU响应一次中断自动完成三件事情:响应一次中断自动完成三件事情:PSW 入栈入栈 保护现场,保护现场,CS,IP 保存入栈保存入栈 保留断点,保留断点,转中断例行程序去执行

45、。转中断例行程序去执行。q 中断返回时:中断返回时:恢复恢复 IP、CS 及及 PSWq 中断向量:中断例行程序入口地址。中断向量:中断例行程序入口地址。在微机中,存储器的最低地址在微机中,存储器的最低地址00000H003FFH为中断向量为中断向量区,区,存放存放256种类型中断例行程序入口地址,种类型中断例行程序入口地址,每个中断向量每个中断向量占占4个单元个单元。中断指定类型号中断指定类型号N 乘以乘以 4取得指定类型的中断向量地址。取得指定类型的中断向量地址。58例:中断类型例:中断类型9,9 4=36 00024H00027H单元中放中断向量。单元中放中断向量。IBM-PC机中为每个

46、类型规定了一种功能机中为每个类型规定了一种功能:中断类型中断类型功能功能类型类型0除数为除数为0中断例行程序中断例行程序类型类型1单步单步类型类型2非屏蔽中断,非屏蔽中断,NMI类型类型3设置断点设置断点类型类型4溢出处理中断,溢出处理中断,INTO指令指令类型类型10显示设备中断显示设备中断类型类型20程序结束中断程序结束中断类型类型21DOS系统功能调用功能程序系统功能调用功能程序*除非特别注明,类型号是以除非特别注明,类型号是以16进制形式表示的。进制形式表示的。59中断处理程序入口地址的地址中断处理程序入口地址的地址类型类型00000H00001H类型类型0(IP)00002H0000

47、3H类型类型0(CS)00004H00005H类型类型1(IP)00006H00007H类型类型1(CS)00008H00009H类型类型2(IP)0000AH0000BH类型类型2(CS)0000CH0000DH类型类型3(IP)0000EH0000FH类型类型3(CS)00010H00011H类型类型4(IP)00012H00013H类型类型4(CS)003FCH003FDH类型类型255(IP)003FEH003FFH类型类型255(CS)60(1).介绍几条指令:介绍几条指令:INT n,IRET 格式:格式:INT n;n常数或表达式,常数或表达式,n=0255或或INT 执行操作:

48、执行操作:SP SP-2,(SP+1),(SP)PSW SP SP-2,(SP+1),(SP)CS SP SP-2,(SP+1),(SP)IP IP (n4)CS(n4+2)清除清除IF、TF,避免进入中断以后不被外面其它中断所打断,避免进入中断以后不被外面其它中断所打断 及进入中断以后按单步执行。及进入中断以后按单步执行。61q 类型类型03的中断称为内部中断。的中断称为内部中断。类型类型0:指令系统没有:指令系统没有INT0这条指令这条指令 除数为除数为0中断中断 除数为除数为0:它:它既不是外部中断既不是外部中断 也不是软件中断也不是软件中断,是是由由 CPU自身产生的自身产生的,所以无

49、对应中断指令。,所以无对应中断指令。有符号数进行除法所得的商超出规定范围有符号数进行除法所得的商超出规定范围有符号数进行除法运算,所得的有符号数进行除法运算,所得的商超出规定范围商超出规定范围,CPU自动产生类型为自动产生类型为0的中断的中断,转入响应的中断处理程,转入响应的中断处理程序。序。62 类型类型1单步中断单步中断 TF=1进入单步中断。进入单步中断。单步中断单步中断不是不是由外部硬件或程序中的中断产生,由外部硬件或程序中的中断产生,而是而是CPU测试测试TF=1时产生的。时产生的。单步中断单步中断每执行一条指令,进行一次单步中断处理,每执行一条指令,进行一次单步中断处理,显示出一系

50、列内显示出一系列内 部寄存器的值,并告部寄存器的值,并告 示一些示一些 附带的信息。附带的信息。一般用于调试程序中逐条执行用户程序。一般用于调试程序中逐条执行用户程序。对于有对于有重复前缀串操作指令重复前缀串操作指令单步操作下,单步操作下,每重复一次每重复一次将产生一个单步中断将产生一个单步中断,而不是整个串操作结束后进入单步操,而不是整个串操作结束后进入单步操作。作。63 类型类型2NMI中断,非屏蔽中断中断,非屏蔽中断NMI中断是由中断是由NMI引腿引入,引腿引入,不受不受IF屏蔽屏蔽,只要只要NMI腿出现中断请求腿出现中断请求中断处理子程序入口地址在中断处理子程序入口地址在:0000H:

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第三章80X86指令系统13课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|