《控制传送指令.》由会员分享,可在线阅读,更多相关《控制传送指令.(76页珍藏版)》请在金锄头文库上搜索。
1、五控制传送指令五控制传送指令(Control transfer instructions) (一)、控制传送指令概述控制传送指令概述 控制传送指令包括四种:控制传送指令包括四种: 转移指令,循环控制指令,过程调用指令,中断指令。转移指令,循环控制指令,过程调用指令,中断指令。 1 1、转移指令、转移指令 转移指令包括两种:转移指令包括两种: (1)(1)、JMP(Jump) JMP(Jump) 无条件转移指令 无条件转移指令 (2)(2)、JccJcc 条件转移指令条件转移指令 1 (1)(1)、JMP(Jump)JMP(Jump)无条件转移指令无条件转移指令 转移分成两类:段内或段间转移。
2、无条件转移指令有五种格式: q 段内直接短转移 q 段内直接近转移 q 段内间接转移 q 段间直接远转移 q 段间间接转移 JMPJMP指令的操作:指令的操作:无条件地将控制转移到指令中规定的目的地 。 目标地址可以是:直接方式/间接方式给出。 JMP指令不影响标志位。 2 (2)(2)、JccJcc 条件转移指令条件转移指令 汇编程序设计中常利用条件转移指令来实现分支。 “ “cc”cc”表示条件。表示条件。 操作数必须是短标号。转移范围为:转移范围为:128128127127 具体条件转移指令分四种情况讨论:具体条件转移指令分四种情况讨论: 根据单个条件标志的设置情况转移根据单个条件标志的
3、设置情况转移 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) 测试测试CXCX的值为零转移的值为零转移 JCXZ 3 2 2、 过程调用指令过程调用指令 如果有一些程序段在不同地方反复出现,可以将这些程 序段
4、设计成为过程(子程序)供调用。过程结束,返回调用处 。 过程调用指令包括:过程调用指令包括:过程调用指令和返回指令 (1)、 CALL( Call a procedure)调用 CALL调用指令 段内直接调用段间直接调用 段内间接调用段间间接调用 (2)、 RET( Reture from procedure)返回 RET返回指令 段内返回段间返回 段内带立即数返回段间带立即数返回 4 3 3、循环控制指令、循环控制指令 循环控制指令用于使一些程序段反复执行形成循环程序 。 循环控制指令有三种: (1)、LOOP (Loop) 循环指令 (2)、LOOPE/LOOPZ (Loop if equ
5、al / Loop if zero)当相等/为“0”循环 (3)、LOOPNE/LOOPNZ (Loop if not equal/ Loop if not zero) 当不相等/不为“0”循环 5 4 4、中断指令、中断指令 8086/8088CPU 可以在程序中安排一条中断指令引起中断 过程,这种中断称为软中断。 8086/8088CPU8086/8088CPU共有三条中断指令:共有三条中断指令: (1)、INT (Interrupt) (2)、INTO(Interrupt if overflow) (3)、IRET(Interrupt Return) 6 指令指令类类类类型型助助记记记记
6、符符 无条件无条件转转转转移移JMPJMP 条件条件转转转转移移JE/JZ, JNE/JNZ, JS, JNS, JP/JPE, JNP JE/JZ, JNE/JNZ, JS, JNS, JP/JPE, JNP /JPO,JO, JNO, JC, JNC, JB/JNAE, JAE/JNB, /JPO,JO, JNO, JC, JNC, JB/JNAE, JAE/JNB, JA/JNBE, JBE/JNA,JG/JNLE, JGE/JNL, JA/JNBE, JBE/JNA,JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG ,JCXZJL/JNGE, JLE/JNG ,JC
7、XZ 循循环环环环控制控制LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZLOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ 过过过过程程调调调调用用CALL, RETCALL, RET 中断指令中断指令INT, INTO, IRETINT, INTO, IRET 归结控制转移指令分类归结控制转移指令分类 7 ( (二)二)控制传送指令控制传送指令(Control transfer instructions ) 1 1、转移指令转移指令 转移指令指令将程序控制从一处转换到另一处的最直接方法 。 在CPU内部,转移是通过将目标地址传送给IP来实现的 。 注意:注意:
8、CSCS段地址段地址 转移地址转移地址 IPIP偏移量偏移量调用地址寻址调用地址寻址 8 q 先介召控制和非控制转移指令的概念 非控制转移指令:指令本身对CS和IP均无操作,形成顺序执行结构 。 顺序执行结构: 顺序存放,顺序执行 控制转移指令: 以CS和IP为主要操作对象, 改变CS和IP寄存器的值, 就改变了程序执行的流程 。 程序是指令的集合 指令在内存中顺序存放 9 在8086/8088中,指令的地址固定由CS和IP两个寄存器决定。 CS和IP两寄存器的内容决定了程序的流程 , 改变改变CSCS和和IPIP寄存器的值,寄存器的值, 就改变了程序执行的流程 就改变了程序执行的流程 。 8
9、086/8088 8086/8088 中中CSCS和和IPIP的变化规则:的变化规则: q resetreset复位后复位后,( CS ) = FFFFH,( IP ) = 0 故80888088从内存从内存FFFF:0000HFFFF:0000H处取第一条指令执行处取第一条指令执行, , 第一条指令在内存的ROM区。 q 非控制转移指令非控制转移指令 CPU取来一条指令后, 自动将IP的值加上该指令的字节数, 使IP顺序指向下一条指令, CPU取来紧接着的指令执行。 (此时IP的变化由CPU内部的硬件自动完成) 10 qq 控制转移指令以控制转移指令以CSCS和和IPIP为主要操作对象为主要
10、操作对象 控制转移指令改变CS和IP的值, 使程序产生分支、调用结构。 分支结构、调用结构:分支结构、调用结构: 顺序存放,非顺序执行顺序存放,非顺序执行 例:比较(AX)、(BX)的大小,将大数存于( max )单元 。 CMP AX, BX JGEJGE great XCHG AX, BX great: MOV max, AX 11 (1 1)、)、JMP(Jump)JMP(Jump)无条件转移指令无条件转移指令 JMP(jmp)跳转指令。 JMP指令必须指定转移的目标地址(或转向地址)。 转移分成两类:段内或段间转移。 段内转移:只要改变IP寄存器的内容 指在同一段的范围之内进行转移 即
11、用新的转移目标地址代替原有的IP值。 段间转移:要修改IP、 CS寄存器的内容 转到另一段去执行程序。 即转移目标地址= 新的段地址和偏移地址两部分组成。 12 段内直接短转移: 格式:JMP SHORT OPR OPR在汇编语言中使用符号地址。 在机器语言中存放位移量D8 位移量D8 = 符号地址的偏移地址 - 当前IP的值 执行操作:(IP)(IP)当前+D8 SHORT 短属性标号 8位位移量D8的范围在(-128 127)之间,占有一个字节。 而指令本身占有两个字节。 13 例如:代码段内有一条无条件转移指令在汇编语言中使用符号地址 。JMP SHORT NEXT指令执行过程: NEX
12、T在汇编语言中使用符号地址 (IP)(IP)当前+D8 14 8位位移量D8的范围在(-128 127)之间,否则出错。 标号与控制转移指令在同一段中,后引用的标号可以不用SHORT, 前引用的标号必须使用SHORT 如:tager: JMP tager JMP SHORT tager tager: 15 段内直接近转移: 格式:JMP NEAR PTR OPR OPR在汇编语言中使用符号地址。 在机器语言中存放位移量D16 位移量D16 = 符号地址的偏移地址 - 当前IP的值 执行操作: (IP)(IP)当前+D16 NEAR近属性标号 位移量为D16范围:-32768+32767H,占有
13、两个字节。 而指令本身占有三个字节。可以转移到段内的任一位置。 过程:如同SHORT,只是位移量为D16范围-32768+32767H, 占有两个字节。 16 段内间接转移: (CS)不变,只改变(IP) 格式:JMP WORD PTR OPR OPR 为16位寄存器、 或存储器(除立即数以外的任何一种寻址方式) 执行操作: (IP) (EA) 或(IP) (reg16) 指令格式举例: JMP AXJMP SI JMP TABLE BX; 操作数已定义为16位存储器 JMP ALPHA_WORD;操作数已定义为16位存储器 JMP WORD PTR BPDI 17 例: (DS)=1000H
14、, (BX)=1000H, (CX)=5000H, (CS)=3000H (11000H)=1234H, ( 11002H)=5678H JMP CX; (IP)=5000H JMP WORD PTR BX;(CS)=3000H , (IP)=1234H (PA)=(16d(DS)+(BX)=(11000H)=1234H 18 段间直接(远)转移: (CS) 、 (IP)都改变 格式:JMP FAR PTR OPR; OPR在汇编语言中使用符号地址。 符号地址与指令不在同一个段里。 在机器语言中则要指定转向地址的偏移地址和段地址 执行操作: (IP)OPR所在的段内偏移地址。 (CS)OPR所在的段的段址。 而指令本身占有5个字节: 用2个字分别存放符号地址的段值、偏移值, 用1个字节存放操作码。 19 FAR 远属性标号, 标号与控制转移指令不在同一段中。 在汇编语言中,在机器语言中存放如下: 例