微原-第3章5--转移指令、循环控制指令.

上传人:我** 文档编号:117134579 上传时间:2019-11-18 格式:PPT 页数:34 大小:250.50KB
返回 下载 相关 举报
微原-第3章5--转移指令、循环控制指令._第1页
第1页 / 共34页
微原-第3章5--转移指令、循环控制指令._第2页
第2页 / 共34页
微原-第3章5--转移指令、循环控制指令._第3页
第3页 / 共34页
微原-第3章5--转移指令、循环控制指令._第4页
第4页 / 共34页
微原-第3章5--转移指令、循环控制指令._第5页
第5页 / 共34页
点击查看更多>>
资源描述

《微原-第3章5--转移指令、循环控制指令.》由会员分享,可在线阅读,更多相关《微原-第3章5--转移指令、循环控制指令.(34页珍藏版)》请在金锄头文库上搜索。

1、本教案内容 第3章 8086CPU指令系 统 n汇编语言指令 n8086指令分类 n数据与转移地址的 寻址方式 n数据传送类指令 n算术运算类指令 n逻辑运算类指令 n移位类指令 n标志位操作指令 9.转移指令 10.循环控制 指令 11.子程序调 用返回指令 12.中断调用返 回指令 13.字符串操作 指令 14.I/O输入输 出指令 15.其它指令 16.宏指令 寻找的操作数作地址用,给IP或给CS:IP, 从而实现程序的转移。 如果程序转移后只有IP发生了改变,则称 为段内转移或者称为近程转移(也称为NEAR 型转移)。 如果程序转移后CS、IP均发生了改变,则 称为段间转移或者称为远程

2、转移(也称为FAR 型转移)。 3.9 转移指令 8086指令系统中的转移指令有两大类: 无条件转移指令:有JMP、CALL、RET、IRET 条件转移指令:如JZ、JC、JCXZ、LOOP等。 3.9 转移指令 3.9 转移指令 一、无条件转移指令 格式: JMP LABEL ;转移到标号LABEL处执行程序 JMP REG16 ;转移到由通用寄存器REG指定的位置执行程序 JMP MEM ;转移到由存储单元MEM指定的位置执行程序 3.9 转移指令 说明: 在JMP LABEL中,LABEL为标号,当LABEL与该转移指令位 于同一个段内时,则为段内直接转移,转移目的地址的( CS)不变,

3、(IP)(IP)+DISP16,其中DISP16表示转移目 的地址与JMP转移指令之间的16位偏移量,这时也称为近( 程)转移。当转移目的地址与JMP转移指令之间的偏移量可 以用8位有符号数表示时,则(IP)(IP)+DISP8,这时称 为短转移。 当LABEL与JMP指令位于不同段内时,则表示段间直接转移 ,转移目的地址为(CS)SEG LABEL,(IP)(IP)+ OFFSET LABEL,这时也称为远(程)转移。 3.9 转移指令 例如,为完成转移到L1标号处,可以采用JMP L1,这时并不需要特别指出转移指令的种类,宏 汇编程序(MASM)会根据标号L1的位置,自动生 成相应的指令代

4、码。 如果要根据BX的内容进行转移,即BX中存放有转 移的目的地址,则采用 JMP BX指令。 设双字变量VAR1存放有转移的目的地址,则可以 采用 JMP VAR1完成程序的段间转移。 3.9 转移指令 例3.29 各种转移方式示例。 解:设在数据段中定义变量: DBT1 DW 0400H DBT2 DD 0100 0020H TAB DW 0600H,0640H,06A0H 则在代码段中有: MOV BX, 2 JMP BX ;转移到CS:0002H JMP DBT1 ;转移到CS:0400H JMP DBT2 ;转移到0100H:0020H JMP TABBX+2 ;转移到CS:06A0

5、H JMP WORD PTRBX ;转移到本段,偏移地址保存在 DS:0002H与DS:0003H中 3.9 转移指令 二、有条件转移指令 1.对有条件转移指令,只有当给定的条件满 足时,才转移到指定的地址,否则执行下一 条指令。依据为PSW中的标志位,这些标志 位是由上一条指令执行时产生的。 2.条件转移指令的目的地址必须在现行的代 码段内,并且以当前IP为基准,其位移必须 在-128+127内(短转移); 3.所有条件转移指令不影响标志位。 有条件转移指令说明 指令格式测试测试 条件功能英文描述 JC LABEL(CF=1)有进进/借位Jump if carry JNC LABEL(CF0

6、)无进进/借位 Jump if not carry JE/JZ LABEL(ZF=1)相等 Jump if equal/zero JNE/JNZ LABEL(ZF0)不相等 Jump if not equal/not zero JS LABEL(SF1)负负数Jump if sign JNS LABEL(SF0)正数Jump if not sign 根据单个标志位(CF、ZF、SF、OF、PF)的状态进行转移 3.9 转移指令 JO LABEL(OF1)有溢出 Jump if overflow JNO LABEL(OF0)无溢出 Jump if not overflow JP/JPE LABE

7、L(PF1)有偶数个1 Jump if parity/parity equal JNP/JPO LABEL (PF0)有奇数个1 Jump if not parity/parity odd JA/JNBE LABEL(CF=0)(ZF=0)高于/不低于等于 JAE/JNB LABEL(CF=0)高于等于/不低于 JB/JNAE LABEL(CF=1)低于/不高于等于 JBE/JNA LABEL(CF=1) (ZF=1)低于等于/不高于 无符号数比较 JG/JNLE LABEL(SF OF) ZF)0大于/不小于等于 JGE/JNL LABEL(SF OF)=0大于等于/不小于 JL/JNGE

8、LABEL (SF OF)=1小于/不大于等于 JLE/JNG LABEL(SF OF) ZF)1小于等于/不大于 有符号数比较 3.9 转移指令 在使用有条件转移指令时,应该注意下列几点: 1由于有条件转移指令的指令转移范围为-128 +127,因此为了转移到更远的位置,需要将条件 转移指令与JMP指令结合起来使用。 例如当(AL)等于1时要转移到较远的KS1处,应 该采用: CMP AL, 1 JNZ K1 JMP KS1 K1: 2对有符号数和无符号数进行比较时,应该采用不同的转移 指令,JB、JA为无符号数的比较指令,而JL、JG为有符号数的 比较指令,例如: VAR1 DW 003A

9、H VAR2 DW 8003H MOV AX, VAR1 MOV BX, VAR2 CMP AX, BX ;设置标志位CF=1, OF=0, SF=1, AF=0, ZF=0, PF=0 JB KS1 JB KS1 指令的条件满足(CF=1),也即将两个数看成无符号 数时,条件003AH8003H满足,因此程序转移到KS1。 如果JB KS1换成JL KS1 指令,则表示将两个数看成有符号 数进行比较,条件003AH8003H不满足,因此,程序不产生转 移,继续执行下一条指令。 3.9 转移指令 3特别注意有些指令并不影响标志位,如通用 传送指令MOV等,因此要判断变量VAR1是否为0 时,应

10、该采用 MOV AX, VAR1;不影响标志位 OR AX, AX;在保持AX内容 不变的前提下,设置标志位 或 AND AX, AX 或 CMP AX,0 JZ KS1 3.9 转移指令 4完成同一功能可以有多种形式,例如两个无 符号数比较时,(DST)低于(SRC)时转移到 KS1,则可以采用: JB KS1 或JNAE KS1 或JC KS1 3.9 转移指令 练习: 1.在内存的数据段中存放了若干个8位带符号数, 数据块的长度为150,首地址为TABLE,试统计 其中正元素、负元素及零元素 的个数,并分 别将个数存入PLUS、MINUS和ZERO单元。 2.在以DATA为首地址的内存数

11、据段中,存放了100 个16位带符号数,试将其中的最大和最小的带 符号数找出来,分别存放到以MAX和MIN为首地 址的内存单元中。 1.循环程序的基本结构 (A)先循环工作,后循环判定 (DO-UNTIL结构) 循环程序有以下两种结构。 3.10 循环控制指令 初始化准备部分 出口判定 Y N 开 始 结 束 循环工作部分 循环参数调整部分 应用场合:适合于循环次 数已知的情况 循环判定条件:用CX 作减1计 数控制循环 要避免出现死循环 3.10 循环控制指令 初始化准备部分 出口判定 Y N 开 始 结 束 循环工作部分 循环参数调整部分 应用场合: 适合于循环次数未 知或可能会出现0次循

12、环的情况 循环判定条件:用条件标志 (B)先循环判定,后循环工作 (DO-WHILE结构) 要避免出现死循环 3.10 循环控制指令 2.循环程序的组成 不管是哪一种循环结构,一个标准的循 环程序应由以下四部分组成: 初始化准备部分 循环工作部分 参数调整部分 出口判定部分 3.10 循环控制指令 初始化准备部分 循环工作部分 这是为循环做准备的,它不在循环体内。 这部分是循环程序解题所需的核心程序, 题目要完成的功能在此进行。根据题目要求不 同,这部分程序可以很简单,也可以很复杂, 甚至是内循环嵌套外循环结构多重循环程 序。 3.10 循环控制指令 参数调整部分 这部分主要用来更新某些数据或

13、 修正循环控制的参数,以保证每次循 环所完成的功能不是完全重复的。 3.10 循环控制指令 循环出口判定部分 循环程序中至少要有一个出口判定, 以保证循环程序正常结束。也有些循环程 序有多个出口,程序可以有多个条件作为 循环结束的控制,只要其中一个条件满足 即可结束循环。 3.10 循环控制指令 从程序上说,以上四个部分的分界可 能不是很明确的,有时工作部分与调整部 分可能就是同一段程序,但从功能上说, 以上几个部分都是必需的。 3.10 循环控制指令 3.循环控制指令 为了便于循环控制,8086/8088CPU 专门设置了一类循环控制类指令: 3.10 循环控制指令 3.10 循环控制指令

14、格式: LOOP LABEL ;(CX)(CX)-1, (CX)0时转LABEL LOOPZ/LOOPE LABEL ;(CX)(CX)-1, (CX)0且ZF=1时转LABEL LOOPNZ/LOOPNE LABEL ;(CX)(CX)-1, (CX)0且ZF=0时转LABEL JCXZ LABEL ;CX=0时转LABEL 说明: 循环控制指令的寻址方式均为段内直接转移,而且为短转移 方式。 3.10 循环控制指令 1. LOOP指令 LOOP(Loop)指令为常用的循环控制指令,(CX)的内容 为设定的循环次数,每循环一次(CX)的内容减1,直到( CX)为零时退出循环。其循环结构为:

15、MOV CX, 次数 ;循环准备 标号: ;循环体 LOOP 标号 这里的“标号”与“LOOP 标号”指令之间至多包含128字 节,这是因为循环控制指令为短转移指令。 3.10 循环控制指令 2. LOOPZ/LOOPE指令 LOOPZ/LOOPE(Loop if zero/equal)指令与LOOP指令类 似,只是当(CX)0且ZF=1时才转至LABEL,因此是否循环 ,除了与设定的循环次数有关外,还与循环中设定的条件 是否满足有关。例如: MOV CX, 10 L1: CMP AX,BX ;若(AX)(BX),即ZF=0,则退出循环 LOOPZ L1 这种指令非常适合于在指定区域中查找不同

16、的“字符”, 当找到不同的“字符”时,会自动退出循环。 3.10 循环控制指令 3. LOOPNZ/LOOPNE LOOPNZ/LOOPNE(Loop if not zero/not equal)指令的功 能与LOOPZ/LOOPE指令相反,只是当(CX)0且ZF=0时才转 至LABEL。例如: MOV CX, 10 L2: CMP AX,BX ;若(AX)(BX),即ZF=1, 则退出循环 LOOPNZ L2 这种指令非常适合于在区域中查找指定的“字符”,当找 到指定的“字符”时,会自动退出循环。 3.10 循环控制指令 4. JCXZ指令 JCXZ(Jump if register CX=0)指令经常与循环指令配合 使用。如果循环次数(CX)设定为0,则要循环65536次( 最大的循环次数),这一点与常规表示不同。为此,应该 在进入循环前检查(CX)的值,如果(CX)为0,则跳过循 环,这时可以采用JCXZ指令完成,其结构为: M

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号