微机原理第三章5_第1页
微机原理第三章5_第2页
微机原理第三章5_第3页
微机原理第三章5_第4页
微机原理第三章5_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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) JCXZ5 如果有一些程序段在不同地方反复出现,可以将这些程序如果有一些程序段在不同地方反复出现,可以将这些程序段设计成为过程(子程序)供调用。过程结束,返回调用处。段设计成为过程(子程序)供调用

3、。过程结束,返回调用处。过程调用指令和返回指令过程调用指令和返回指令 CALL调用指令调用指令 段内直接调用段内直接调用段间直接调用段间直接调用 段内间接调用段内间接调用段间间接调用段间间接调用 RET返回指令返回指令段内返回段内返回段间返回段间返回 段内带立即数返回段内带立即数返回段间带立即数返回段间带立即数返回6 循环控制指令用于使一些程序段反复执行形成循环程序。循环控制指令用于使一些程序段反复执行形成循环程序。 循环控制指令有三种:循环控制指令有三种: (1)、LOOP (Loop) 循环指令循环指令 (2)、LOOPE/LOOPZ (Loop if equal / Loop if ze

4、ro) 当相等当相等/为为“0”循环循环 (3)、LOOPNE/LOOPNZ (Loop if not equal/ Loop if not zero) 当不相等当不相等/不为不为“0”循环循环7 8086/8088CPU 可以在程序中安排一条中断指令引起中断可以在程序中安排一条中断指令引起中断过程,这种中断称为软中断。过程,这种中断称为软中断。 (1)、INT (Interrupt) (2)、INTO(Interrupt if overflow) (3)、IRET(Interrupt Return)89转移转移将程序控制从一处转换到另一处的最直接方法。将程序控制从一处转换到另一处的最直接方法

5、。在在CPU内部,转移是通过将目标地址传送给内部,转移是通过将目标地址传送给IP来实现的。来实现的。 10q 先介召控制和非控制转移指令的概念先介召控制和非控制转移指令的概念 非控制转移指令非控制转移指令:指令本身对指令本身对CS和和IP均无操作,形成顺序执行结构。均无操作,形成顺序执行结构。 顺序执行结构:顺序执行结构: 顺序存放,顺序执行顺序存放,顺序执行 控制转移指令控制转移指令: 以以CS和和IP为主要操作对象,改变为主要操作对象,改变CS和和IP寄存器的寄存器的 值,值, 就改变了程序执行的流程。就改变了程序执行的流程。 程序是指令的集合程序是指令的集合 指令在内存中顺序存放指令在内

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

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

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

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

10、. next:next:MOV 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内存内存168位位移量位位移量D8的范围在(的范围在(-128 127)之间)之间,否则出错。否则出错。 源程序 : 源程序 :next :next :. -128-128.条件转移指令:条件转移指令:JMP SHORT JMP SHORT nextnex

11、t.+127+127. next:next: MOV AL,03HMOV AL,03H标号与控制转移指令在同一段中标号与控制转移指令在同一段中,后引用的标号可以不用后引用的标号可以不用SHORT, 前引用的标号必须使用前引用的标号必须使用SHORT如:如:tager: JMP tagerJMP SHORT tager tager:17 段内直接近转移:段内直接近转移: 格式:格式:JMP NEAR PTR OPR OPR在汇编语言中使用符号地址在汇编语言中使用符号地址。 在机器语言中存放位移量在机器语言中存放位移量D16位移量位移量D16 = 符号地址的偏移地址符号地址的偏移地址 - 当前当前

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

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

14、 BX;(CS)=3000H , (IP)=1234H(PA)=(16d(DS)+(BX)=(11000H)=1234H 20段间直接(远)转移:段间直接(远)转移: (CS) 、 (IP)都改变都改变 格式:格式:JMP FAR PTR OPR; OPR在汇编语言中使用符号地址。在汇编语言中使用符号地址。 符号地址与指令不在同一个段里。符号地址与指令不在同一个段里。 在机器语言中则要指定转向地址的偏移地址和段地址在机器语言中则要指定转向地址的偏移地址和段地址执行操作:执行操作: (IP)OPR所在的段内偏移地址。所在的段内偏移地址。 (CS)OPR所在的段的段址。所在的段的段址。而指令本身占

15、有而指令本身占有5个字节:个字节:用用2个字分别存放符号地址的段值、偏移值,个字分别存放符号地址的段值、偏移值,用用1个字节存放操作码。个字节存放操作码。21FAR 远属性标号远属性标号, 标号与控制转移指令不在同一段中。标号与控制转移指令不在同一段中。在汇编语言中,在机器语言中存放如下:在汇编语言中,在机器语言中存放如下:例:例: C1 SEGMENT JMP FAR PTR next_prog C1 ENDS C2 SEGMINT next_prog: C2 ENDSE AE A5 05 00 20 20 00 02 02 0OPOP码码新新(IP)=0250H(IP)=0250H新新(C

16、S)=2000H(CS)=2000HJMPJMP指令指令C1C1段段C2C2段段20000H20000Hnext_prog:next_prog:20250H20250H2000:0250H22 段间间接转移:段间间接转移:(CS) 、 (IP)都改变都改变格式:格式:JMP DWORD PTR OPR OPR 可以使用存储器可以使用存储器(除立即数和寄存器以外的任何一种寻址方式)(除立即数和寄存器以外的任何一种寻址方式)执行操作:执行操作: (IP)(EA) (CS)(EA+2)例:已知例:已知 (BX)=1000H,(,(SI)=2000H , (DS)=2000H(23000H)=2211

17、H, (23002H)=4433HJMP DWORD PTR BXSI则:则: (BX)+(SI)=3000H (IP)=(PA)=(16d(DS)+(BX)+(SI)=(23000H)=2211H (CS)=(PA+2)=4433H23 根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移(10种种) JZ(JE)/JNZ(JNE),),JP(JPE)/JNP(JPO),), JS/JNS, JO/JNO, JB(JNAE、JC)/JNB(JAE、JNC),), 根据两个无符号数比较结果转移(根据两个无符号数比较结果转移(4种)种) JB(JNAE、JC)/JNB(JAE、JNC),

18、),JBE(JNA)/JNBE(JA) 比较两个带符号数,并根据比较结果转移(比较两个带符号数,并根据比较结果转移(4种)种) JL(JNGE)/JNL(JGE),),JLE(JNG)/JNLE(JG)24指令格式:指令格式:J cc OPR操作:根据上一条指令所设置的条件码来判别测试条件转移。操作:根据上一条指令所设置的条件码来判别测试条件转移。每一种条件转移指令都有它的测试条件。每一种条件转移指令都有它的测试条件。满足条件时满足条件时 :(IP)(IP)当前当前+ 使用相对寻址方式,范围使用相对寻址方式,范围-128+127个字节个字节不满足条件时:不满足条件时:(IP)不变,顺序执行下一

19、条指令)不变,顺序执行下一条指令25所有条件转移指令都是相对转移形式,所有条件转移指令都是相对转移形式,范围(范围(-128+127)。)。当需往一个较远地方进行条件转移时,当需往一个较远地方进行条件转移时,选用条件转移转到附近一个单元,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。然后,再用无条件转移转到较远的目的地。 条件转移指令中,相当一部分指令是在比较完二个数大小条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,后,根据结果而决定是否转移,条件转移指令不影响标志位条件转移指令不影响标志位26按转移条件不同,条件转移指令可以分为四大类:按

20、转移条件不同,条件转移指令可以分为四大类: 以单个状态标志作为转移条件助记符以单个状态标志作为转移条件助记符 转移条件转移条件 以以CX的值为的值为0作为转移条件作为转移条件JCXZCX=027JA/JNBECFZF=0高于高于/JAE/JNB/JNCCF=0 高于或等于高于或等于/无进位无进位JB/JNAE/JCCF=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/不大

21、于不大于28条件转移指令应用条件转移指令应用 例:比较二个数是否相等例:比较二个数是否相等 如相等做动作如相等做动作1 否则做动作否则做动作2 CMP AX,BX Action_2: 或或 CMP AX,BX action_1: 29例:例: X, Y 放在放在 X,Y 单元里,单元里,(带符号数判断)(带符号数判断) 先判先判 X50,YES too_high, NO 做做X-Y , 溢出溢出overflow , 否则求否则求|XY| resultMOV AX, X CMP AX, 50 JG too_high ; 大于转大于转too_highSUB AX, YJO overflow ; 溢

22、出转溢出转overflowJNS nonneg ; S=0转转nonneg NEG AX nonneg: MOV result , AXtoo_high: overflow: 30 例:例:在在 M 中有一个首地址为中有一个首地址为 array 的的 N 字数组字数组, 要求测试其中正数、要求测试其中正数、0及负数的个数(带符号数判断)及负数的个数(带符号数判断)正数个数放在正数个数放在: (DI)中,)中, 0的个数放在的个数放在: (SI)中,)中,负数的个数放在负数的个数放在: N-(DI)-(SI)送()送(AX)如果没有负数转如果没有负数转 skip, 如果有负数转如果有负数转 ne

23、g_val程序:程序: mov cx, N ; N字数组字数组 mov bx, 0 mov di, bx mov si, bx again: cmp word ptr arrarybx, 0 jle less_or_ag inc di ;正数个数正数个数 jmp short neat less_or_ag: jl neat inc si ; 0的个数的个数neat: add bx, 2 dec cx jnz again mov ax, Nsub ax, disub ax, sijz skip ;没有负数没有负数jmp near ptr neg_val ;有负数有负数skip: neg_val:

24、 31子程序子程序程序中具有独立功能的部分编写成独立程序模块。程序中具有独立功能的部分编写成独立程序模块。子程序(过程)定义子程序(过程)定义 格式:格式: 符号名符号名 PROC 类型类型 符号名符号名 ENDP 子程序调用和返回指令:子程序调用和返回指令: CALL RET(RETURN) 过程有两种类型:过程有两种类型:按过程与调用语句间的位置,过程有两种类型。按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中类型:调用指令与过程不在同一个段中CALL指令和指令和RET指令都不影响条件

25、码。指令都不影响条件码。32 CALL调用指令调用指令调用地址由指令给出调用地址由指令给出 CALL调用指令有调用指令有4 4种:种: 段内直接调用段内直接调用段间直接调用段间直接调用 段内间接调用段内间接调用段间间接调用段间间接调用33段内直接调用段内直接调用格式:格式:CALL DST ;(SP)(SP)-2, (SP)+1,(SP)(IP); (IP) (IP)+D16 DST给出转向地址(子程序的入口地址)。给出转向地址(子程序的入口地址)。 D16机器指令中的位移量(转向地址和返回地址之差)。机器指令中的位移量(转向地址和返回地址之差)。 位移量为位移量为D16范围范围-32768+

26、32767H,占有两个字节。,占有两个字节。34工作过程如下:工作过程如下:例:例: code SEGMENT ;code段段 CALL subp ;XXX的地址入栈的地址入栈 ,D16 =subp-yyy XXX: PROC NEAR ;过程定义过程定义 RET ;返回返回 subp ENDP code ENDS35,子程序可以直接访子程序可以直接访问模块中的变量。问模块中的变量。 subp PROC NEAR MOV AX,X MOV BX,Y MUL BX RETsubp ENDCODESG ENDS END START36 段内间接调用:段内间接调用:格式:格式: CALL DST;

27、WORD PTR OPR OPR 为为16位寄存器,位寄存器, 或存储器(除立即数以外的任何一种寻址方式)或存储器(除立即数以外的任何一种寻址方式) (SP)(SP)-2 (SP)+1,(,(SP)(IP) (IP)(EA) EA由由DST寻址方式所确定的有效地址。寻址方式所确定的有效地址。37 段间直接调用:段间直接调用:格式:格式:CALL FAR PTR DST;(SP)(SP)-2(SP)(SP)-2 38例例 : CSEG1 SEGMENT CALL FAR PTR subp;处的处的CS:IP入栈转入栈转subp : CSEG1 ENDSCSEG2 SEGMENT subp PRO

28、C RET subp ENDP CSEG2 ENDS39 段间间接调用:段间间接调用:格式:格式: CALL DWORD PTR DST执行操作:执行操作: (SP)(SP)-2 (SP)(SP)-2 EA由由DST的寻址方式确定的有效地址。的寻址方式确定的有效地址。40 RET返回指令返回指令放在子程序的末尾放在子程序的末尾使子程序在功能完成后返回调用程序继续执行。使子程序在功能完成后返回调用程序继续执行。*为能准确返回为能准确返回 ,返回指令类型与调用指令类型相对应。,返回指令类型与调用指令类型相对应。段内返回段内返回段间返回段间返回 段内带立即数返回段内带立即数返回段间带立即数返回段间带

29、立即数返回在子程序调用时,返回地址入栈在子程序调用时,返回地址入栈 返回时:将返回地址出栈返回时:将返回地址出栈 (IP)(段内或段间)。)(段内或段间)。 (CS)(段间)。)(段间)。41段内返回:段内返回:格式:格式: RET; 机器码:机器码: C3H或者或者C2H (IP)(SP)+1,(,(SP) (SP)(SP)+2段间返回:段间返回:格式:格式: RET; 机器码:机器码: CBH或或CAH (IP)(SP)+1,(,(SP) (SP)(SP)+2 (CS)(SP)+1,(,(SP) (SP)(SP)+242段内带立即数返回段内带立即数返回格式:格式:RET EXP;执行操作:

30、执行操作: (IP)(SP)+1,(,(SP) (SP)(SP)+2 EXP是一个表达式是一个表达式计算出来的常数成为机器指令中位移量计算出来的常数成为机器指令中位移量D16,修改堆栈,修改堆栈 指针。指针。43例如:例如:RET EXP 堆栈使用情况堆栈使用情况: ASSUME CS:CODE,DS:DATAMAIN PROC FAR START: MOV AX,DATA MOV DS,AX PUSH BX PUSH CX CS:XXXX MOV AH, 4CH INT 21H MAIN ENDP(BX)(BX)(SP)(SP)(CX)(CX)XXXXHXXXXHPUSH BXPUSH BX

31、PUSH CXPUSH CXCALL DELCHARCALL DELCHARRET 4RET 4RETRETDELCHAR PROC DELCHAR ENDP END STARTRET EXP 堆栈使用情况堆栈使用情况: 44 段间带立即数返回:段间带立即数返回: 格式:格式:RET EXP; (IP)(SP)+1,(,(SP)(SP)(SP)+2(CS)(SP)+1,(,(SP)(SP)(SP)+2(SP)(SP)+D16 CALL指令和指令和RET指令都不影响条件码。指令都不影响条件码。45例例:学习使用段内、段间直接调用指令的使用及堆栈情况学习使用段内、段间直接调用指令的使用及堆栈情况

32、主程序主程序 MAIN在一个代码段中在一个代码段中 子程序子程序 PRO-A PRO-B PRO-C在另一个代码段在另一个代码段程序调用关系程序调用关系:另一个代码段另一个代码段 PRO-A PRO-B CALL near ptr PRO-B CALL near ptr PRO-C (IP)=2500H (IP)=4000H CALL near ptr PRO-C RET (IP)=3700H PRO-C RET RET (SP)=0100H MAINCALL far ptr PRO-A(CS)=0500H (IP)=1000H 46栈顶TOS栈顶TOS0100H0100H0500H0500H

33、1000H1000H00FCH00FCH0500H0500H1000H1000H2500H2500H00FAH00FAHSPSP(1)(1)SPSPTOSTOSSPSP(2)(2)(3)(3)TOSTOS4000H4000H2500H2500H1000H1000H0500H0500H00F8H00F8H4000H4000H2500H2500H1000H1000H0500H0500H4000H4000H2500H2500H1000H1000H00FAH00FAH0500H0500H00FCH00FCHTOSTOSTOSTOSTOSTOSSPSPSPSPSPSP(4)(4)(5)(5)(6)(6)

34、4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H00FAH00FAH00FCH00FCH0100H0100HTOSTOSSPSPSPSPSPSP(9)(9)(8)(8)(7)(7)TOSTOSTOSTOS堆栈情况:堆栈情况: 47操作数操作数执行操作执行操作符号地址符号地址 (SHORT)(IP) (IP)当前当前+ 8位位移量位位移量符号地址符号地址 ( NEAR属性属性)(IP) (IP)当前当前+

35、16位位移量位位移量reg (16位)或位)或 mem ( DW类型类型 )(IP) ( reg ) 或或(IP) (mem)符号地址符号地址 ( FAR属性属性)(IP) 符号地址的偏值符号地址的偏值 (CS) 符号地址的段值符号地址的段值mem ( DD类型类型 )(IP) ( mem ), (CS) (mem+2 ) 当前当前IP的值为控制转移指令下一条指令的偏移地址。的值为控制转移指令下一条指令的偏移地址。 位移量位移量 = 符号地址的偏移量符号地址的偏移量 - 当前当前IP的值。的值。 符号地址(目标地址)符号地址(目标地址)= 当前当前IP的值的值 + 位移量位移量 指令格式:指令

36、格式: JMP 操作数操作数 48由由CS是否变化、以及操作数类型决定情况如下表是否变化、以及操作数类型决定情况如下表段内直接短段内直接短 方方 式式不变不变符号地址符号地址(SHORT)-128 127即即0FFH段内直接近段内直接近 方方 式式不变不变符号地址符号地址(NEAR属性属性)一个段内一个段内0FFFFH段段 内间接方式内间接方式不变不变Reg mem (DW类型类型)一个段内一个段内0FFFFH段段 间直接方式间直接方式变变符号地址符号地址(FAR属性属性)整个内存整个内存0FFFFFH段段 间间接方式间间接方式变变mem(DD类型类型)整个内存整个内存0FFFFFH49 各控

37、制转移指令允许使用的转移方式各控制转移指令允许使用的转移方式 50例例 : JMP again ()JMP BX ()JMP WORD PTR BX()JMP DWORD PTR ()Jz AX () LOOP BX ()Jnz next () (若(若 next的位移量超出的位移量超出-128127)指令指令JMP、CALL 、Jcc、LOOPxx本身对标志无影响本身对标志无影响。513、循环控制指令、循环控制指令格式格式: LOOPxx符号地址符号地址 执行执行 操作操作 : (CX) (CX)- 1 此此操作不影响标志操作不影响标志 检查转移条件检查转移条件xx,满足转向目标地址去执行,

38、满足转向目标地址去执行; 不满足执行不满足执行LOOPxx后一条指令后一条指令转移方式转移方式 只允许段内直接短方式,跳转范围只允许段内直接短方式,跳转范围-128127助记符助记符转移条件转移条件不转移条件不转移条件LOOPCX0CX=0LOOPZCX0且且ZF=1CX=0或或ZF=0LOOPNZCX0且且ZF=0CX=0或或ZF=152与条件转移指令不同的是:与条件转移指令不同的是:循环指令隐含循环指令隐含 ( CX ) 减操作。减操作。例:用循环指令将例:用循环指令将BL寄存器的内容按二进制形式显示出来寄存器的内容按二进制形式显示出来学习:学习: LOOP指令指令MOV CX, 8 ne

39、xt: ROL BL, 1 MOV DL , BL AND DL, 0000 0001B ADD DL , 0011 0000B MOV AH , 2 INT 21H DEC CX JNZ nextLOOP next53循环指令说明:循环指令说明:l l 在串中查找字符,查到了,就可退出,在串中查找字符,查到了,就可退出,可用可用LOOPNZ,不相等时继续查找。,不相等时继续查找。 比较两串时,当有字符不等,就可退出,说明两字符串不等。比较两串时,当有字符不等,就可退出,说明两字符串不等。可用可用LOOPZ,当相等时继续比较。,当相等时继续比较。 执行完执行完 LOOPNZ或或LOOPZ后,根

40、据后,根据ZF标志的值判断结果标志的值判断结果对查找字符,对查找字符,ZF=1,说明找到;否则没有找到。说明找到;否则没有找到。 对串比较,对串比较,ZF=1, 说明两串相等;否则不等。说明两串相等;否则不等。54 : JZ MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL,20H next: CMP AL,BX JZ INC BX DEC CX JNZ next 未找到处理未找到处理 修改偏址修改偏址BXYNAL 关键字关键字CX 串长度串长度NDS:BX 串首址串首址 判判BX是关键字?是关键字? (CX) (CX)

41、- -1找到处理找到处理未找到处理未找到处理 (CX) = 0 ?YN结束出口结束出口55用条件转移:用条件转移: JZ MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL,20H next: CMP AL,BX JZ findINC BX DEC CX JNZ next 未找到处理未找到处理JMP exit find: 找到处理找到处理exit: 结束出口结束出口用循环指令用循环指令:LOOP NZ nextMOV CX, NMOV AX, SEG stringMOV DS, AXLEA BX, string MOV A

42、L,20H next: CMP AL, BX INC BXLOOP NZ nextJZ find未找到处理未找到处理 JMP exit find: 找到处理找到处理exit: 结束出口结束出口DEC BXnext : INC BXCMP AL,BX LOOP NZ nextJZ find未找到处理未找到处理 JMP exit find: 找到处理找到处理exit: 结束出口结束出口56思考:思考: 去掉指令去掉指令JMP exit ,程序执行结果会怎样?,程序执行结果会怎样? PUSH F、POPF可否去掉?若要去掉,程序如何修改?可否去掉?若要去掉,程序如何修改? 执行完执行完LOOPNZ后

43、,可否根据后,可否根据CX=0来来判断查找结果判断查找结果? 有人认为有人认为CX=0,即,即说明没找到说明没找到,对吗?,对吗? 57 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指令提供提前结束循环

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

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

46、,保留断点, 转中断例行程序去执行。转中断例行程序去执行。p 中断返回时:中断返回时: 恢复(恢复(CS ) 、 (IP)及()及(PSW),从堆栈将保存的值弹出来。),从堆栈将保存的值弹出来。中断向量:中断例行程序入口地址。中断向量:中断例行程序入口地址。 IBM-PC中,存储器的最底地址中,存储器的最底地址00000H003FFH为中断向量区,为中断向量区, 存放存放256种类型中断例行程序入口地址种类型中断例行程序入口地址, 每个中断向量占每个中断向量占4个单元个单元。取得指定类型的中断向量地址取得指定类型的中断向量地址中断指定类型号中断指定类型号N4 。60例:中断类型例:中断类型9,

47、9 4 = 36D 24H 00024H00027H单元中存放中断类型单元中存放中断类型9的中断向的中断向 量,量,即中断类型即中断类型9的中断服务程序入口地址。的中断服务程序入口地址。 IBM-PC机中为每个类型规定了一种功能。机中为每个类型规定了一种功能。中断类型中断类型功能功能除数为除数为0中断例行程序中断例行程序单步单步非屏蔽中断,非屏蔽中断, NMI设置断点设置断点溢出处理中断,溢出处理中断,INTO指令指令显示设备中断显示设备中断程序结束中断程序结束中断DOS系统功能调用功能程序系统功能调用功能程序 除非特别注明,类型号是以除非特别注明,类型号是以16进制形式表示的。进制形式表示的

48、。6162q 类型类型03的中断称为内部中断。的中断称为内部中断。 类型类型0 :指令系统没有:指令系统没有INT0这条指令这条指令 除数为除数为0中断中断 除数为除数为0 :它:它既不是外部中断既不是外部中断 也不是软件中断也不是软件中断。 是是由由 CPU自身产生的自身产生的,所以无对应中断指令。,所以无对应中断指令。 有符号数进行除法所得的商超出规定范围有符号数进行除法所得的商超出规定范围有符号数进行除法运算,所得的有符号数进行除法运算,所得的商超出规定范围商超出规定范围,CPU自动产生类型为自动产生类型为0的中断的中断,转入响应的中断处理程序。,转入响应的中断处理程序。63中断处理程序

49、入口地址的地址中断处理程序入口地址的地址类型类型00000H00001H类型类型0(IP)00002H00003H类型类型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)64 类型类型1单步中断单步中断 TF=

50、1进入单步中断。进入单步中断。 单步中断不是由外部硬件或程序中的中断产生,单步中断不是由外部硬件或程序中的中断产生, 而是而是CPU测试测试TF=1时产生的。时产生的。单步中断单步中断每执行一条指令,进行一次单步中断处理,每执行一条指令,进行一次单步中断处理,显示出一系列内显示出一系列内 部寄存器的值,部寄存器的值,并告并告 示一些附带的信息。示一些附带的信息。 一般用于调试程序中逐条执行用户程序。一般用于调试程序中逐条执行用户程序。 对于有对于有重复前缀串操作指令重复前缀串操作指令单步操作下,单步操作下,每重复一每重复一次将产生一个单步中断次将产生一个单步中断,而不,而不 是整个串操作结束后

51、进入单步是整个串操作结束后进入单步操作。操作。单步操作单步操作T、P 不同点?不同点?65 类型类型2NMI中断,非屏蔽中断中断,非屏蔽中断NMI中断是由中断是由NMI引腿引入,引腿引入,不受不受IF屏蔽屏蔽,只要只要NMI腿出现中断请求腿出现中断请求 中断处理子程序入口地址在中断处理子程序入口地址在0:0008H0:000BH中,中,CPU予以响应予以响应, 进入对应的中断处理。进入对应的中断处理。一般用于处理一般用于处理系统的重大故障系统的重大故障。66 类型类型3断点中断断点中断8088提供的一种调试手段提供的一种调试手段。 设置断点过程(在设置断点过程(在DEBUG下):下):G =

52、起始地址起始地址断点地址断点地址 用户程序指定断点:用户程序指定断点: 用断点的中断指令用断点的中断指令INT3来代替原有指令,来代替原有指令, 把把用户原有指令进栈保存用户原有指令进栈保存, 这样运行到断点处执行这样运行到断点处执行INT3,转入中断处理程序,转入中断处理程序 , 显示一系列寄存器值,并给出一些重要信息,用户可显示一系列寄存器值,并给出一些重要信息,用户可判断正误。判断正误。 断点中断还负责恢复进入中断前的被断点中断还负责恢复进入中断前的被INT3替换掉的替换掉的那条指令。那条指令。67(2) 类型类型4溢出中断,溢出中断,INTO指令指令格式:格式:INT O ;该指令检测

53、该指令检测OF标志,标志,OF=1执行执行 INT O,否则执行,否则执行INTO下一条执行下一条执行。执行操作:执行操作: (SP)(SP)-2 , (SP)+1,(SP) (PSW) (SP)(SP)-2 ,(,(SP)+1,(SP) (CS) (SP)(SP)-2 ,(SP)+1,(SP) (IP) (IP) (10H) (CS) (12H) IF=TF=068执行:执行: OF为为1时,执行时,执行 INT O ; OF为为0时,执行时,执行INTO下一条执行。下一条执行。 例例 、 INTO 、 、 、 、 类型类型4中断子程中断子程 、 、 、69使用注意事项:使用注意事项: 对于无符号,有符号对于无符号,有符号 *、/,指令各不相同,指令各不相同。 对于无符号,有符号对于无符号,有符号 +、- 指令同,指令同,有、无符号数有、无符号数 +、- 都有可能产生溢出。都有可能产生溢出。 对于无符号数溢出不是什么错误,表示低位字节或字向高位产生进位、对于无符号数溢出不是什么错误,表示低位字节或字向高位产生进位、借位。借位。 有符号数溢出意味着出错所以应避免。有符号数溢出意味着出错所以应避免。 有符号数,有符号数,OF=1表示有符号数产生溢出。表示有符号数产生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论