1 / 43

五.控制转移指令( Control transfer instructions ) (一)、控制转移指令概述 控制转移指令包括四种:

五.控制转移指令( Control transfer instructions ) (一)、控制转移指令概述 控制转移指令包括四种: 转移指令,循环控制指令,过程调用指令,中断指令。 1 、转移指令 转移指令包括两种: (1) 、 JMP(Jump) 无条件转移指令 (2) 、 Jcc 条件转移指令. (1) 、 JMP(Jump) 无条件转移指令 转移分成两类: 段内 或 段间 转移。 无条件转移指令有五种格式: 段内直接短转移 段内直接近转移 段内间接转移 段间直接远转移

Download Presentation

五.控制转移指令( Control transfer instructions ) (一)、控制转移指令概述 控制转移指令包括四种:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 五.控制转移指令(Control transfer instructions) (一)、控制转移指令概述 控制转移指令包括四种: 转移指令,循环控制指令,过程调用指令,中断指令。 1、转移指令 转移指令包括两种: (1)、JMP(Jump) 无条件转移指令 (2)、Jcc 条件转移指令

  2. (1)、 JMP(Jump)无条件转移指令 • 转移分成两类:段内或段间转移。 • 无条件转移指令有五种格式: • 段内直接短转移 • 段内直接近转移 • 段内间接转移 • 段间直接远转移 • 段间间接转移 • JMP指令的操作:无条件地将控制转移到指令中规定的目的地。 • 目标地址可以是:直接方式/间接方式给出。 • JMP指令不影响标志位。

  3. (2)、Jcc 条件转移指令 • 汇编程序设计中常利用条件转移指令来实现分支。 • “cc”-表示条件。 • 操作数必须是短标号。转移范围为:-128~+127 • 具体条件转移指令分四种情况讨论: • 根据单个条件标志的设置情况转移 • 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) • 测试CX的值为零转移JCXZ

  4. (二).控制转移指令(Control transfer instructions) 1、转移指令 转移指令将程序控制从一处转换到另一处的最直接方法。 在CPU内部,转移是通过将目标地址传送给IP来实现的。 注意:CS—段地址 转移地址 IP—偏移量 调用地址寻址

  5. 控制和非控制转移指令 • 非控制转移指令:指令本身对CS和IP均无操作,形成顺序执行 • 结构。 • 顺序执行结构: 顺序存放,顺序执行 • 控制转移指令: 以CS和IP为主要操作对象,改变CS和IP寄存 • 器的值, 就改变了程序执行的流程。 • 程序是指令的集合 • 指令在内存中顺序存放

  6. 在8086/8088中,指令的地址固定由CS和IP两个寄存器决定。在8086/8088中,指令的地址固定由CS和IP两个寄存器决定。 • CS和IP两寄存器的内容决定了程序的流程 , • 改变CS和IP寄存器的值, 就改变了程序执行的流程。 • 8086/8088 中CS和IP的变化: • reset复位后,( CS ) = FFFFH,( IP ) = 0 • 故8088从内存FFFF:0000H处取第一条指令执行, • 第一条指令在内存的ROM区。 • 非控制转移指令 • CPU取来一条指令后,自动将IP的值加上该指令的字节数, • 使IP顺序指向下一条指令, CPU取来紧接着的指令执行。 • (此时IP的变化由CPU内部的硬件自动完成)

  7. 控制转移指令以CS和IP为主要操作对象 • 控制转移指令改变CS和IP的值, • 使程序产生分支、调用结构。 • 顺序存放,非顺序执行 • 例:比较(AX)、(BX)的大小,将大数存于( max )单元。 • CMP AX, BX • JGE great • XCHG AX, BX • great: MOV [max], AX

  8. (1)、JMP(Jump)无条件转移指令 JMP(jmp)跳转指令。 JMP指令必须指定转移的目标地址(或转向地址)。 转移分成两类:段内或段间转移。 段内转移:只要改变IP寄存器的内容 指在同一段的范围之内进行转移 即用新的转移目标地址代替原有的IP值。 段间转移:要修改IP、 CS寄存器的内容 转到另一段去执行程序。 即转移目标地址= 新的段地址和偏移地址两部分组成。

  9. ( 2)、Jcc 条件转移指令 根据单个条件标志的设置情况转移(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),JBE(JNA)/JNBE(JA) 比较两个带符号数,并根据比较结果转移(4种) JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)

  10. 指令格式:J cc OPR 操作:根据上一条指令所设置的条件码来判别测试条件转移。 每一种条件转移指令都有它的测试条件。 满足条件时 : (IP)←(IP)当前+ 符号扩展到16位后的位移量D8, 使用相对寻址方式,范围-128~+127个字节 不满足条件时:(IP)不变,顺序执行下一条指令

  11. 注意: • 所有条件转移指令都是相对转移形式, • 范围(-128~+127)。 • 当需往一个较远地方进行条件转移时, • 选用条件转移转到附近一个单元, • 然后,再用无条件转移转到较远的目的地。 • ② 条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移, • ③ 条件转移指令不影响标志位

  12. 按转移条件不同,条件转移指令可以分为四大类:按转移条件不同,条件转移指令可以分为四大类: ① 以单个状态标志作为转移条件助记符 转移条件 ② 以CX的值为0作为转移条件

  13. ③以两个无符号数比较的结果作为转移条件 ④以两个带符号数比较的结果作为转移条件

  14. 条件转移指令应用 例:比较二个数是否相等 如相等做动作1 否则做动作2 …… CMP AX,BX JE action_1 action_2: …… …… action_1 :…… 或 …… CMP AX,BX JNZ action_2 action_1: …… action_2: ……

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

  16. (1)、 CALL( Call a procedure)调用 • CALL调用指令 调用地址由指令给出 CALL调用指令有4种: • 段内直接调用 段间直接调用 • 段内间接调用 段间间接调用

  17. 段内直接调用 格式:CALL DST ;(SP)←(SP)-2, ((SP)+1,(SP))←(IP) ; (IP) ← (IP)+D16 DST—给出转向地址(子程序的入口地址)。 D16—机器指令中的位移量(转向地址和返回地址之差)。 位移量为D16范围-32768~+32767H,占有两个字节。

  18. 工作过程: NEAR 类型过程 … CALL subp ;调用 指令 YYY入栈 ,D16 =subp-yyy XXX:YYY … … subp PROC NEAR ;过程定义 … RET ;返回 subp ENDP

  19. 段内间接调用: 格式: CALL DST; ↑ WORD PTR OPR OPR —为16位寄存器, 或存储器(除立即数以外的任何一种寻址方式) 执行操作: (SP)←(SP)-2 ((SP)+1,(SP))←(IP) (IP)←(EA) EA—由DST寻址方式所确定的有效地址。

  20.  段间直接调用: 格式:CALL FAR PTR DST; 执行操作 : (SP)←(SP)-2 ((SP)+1,(SP))←(CS) (SP)←(SP)-2 ((SP)+1,(SP))←(IP) (IP)←DST偏移地址(指令中第2,3字节 ) (CS)←DST段地址(指令中第4,5字节 )

  21.  段间间接调用: 格式: CALL DWORD PTR DST 执行操作: (SP)←(SP)-2 ((SP)+1,(SP))←(CS) (SP)←(SP)-2 ((SP)+1,(SP))←(IP) (IP)←(EA) (CS)←(EA)+2 转子程序入口 EA—由DST的寻址方式确定的有效地址。

  22. (2)、 RET( Reture from procedure)返回 • RET返回指令 放在子程序的末尾 使子程序在功能完成后返回调用程序继续执行。 *为能准确返回 ,返回指令类型与调用指令类型相对应。 RET返回指令有4种: • 段内返回 段间返回 • 段内带立即数返回 段间带立即数返回 • 在子程序调用时,返回地址入栈 • 返回时:将返回地址出栈 (IP)(段内或段间)。 • (CS)(段间)。

  23. 段内返回: 格式: 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)+2

  24. 段内带立即数返回 格式: RET EXP; 执行操作: (IP)←((SP)+1,(SP)) (SP)←(SP)+2 (SP)←(SP)+D16 EXP—是一个表达式 计算出来的常数成为机器指令中位移量D16,修改堆栈 指针。

  25. XXXXH CALL DELCHAR RET (CX) PUSH CX PUSH BX (BX) (SP) RET 4 例如:RET EXP 堆栈使用情况: …… PUSH BX PUSH CX CALL DELCHAR CS:XXXX …… DELCHAR PROC …… RET 4

  26.  段间带立即数返回: 格式:RET EXP; 执行操作: (IP)←((SP)+1,(SP)) (SP)←(SP)+2 (CS)←((SP)+1,(SP)) (SP)←(SP)+2 (SP)←(SP)+D16 CALL指令和RET指令都不影响条件码。

  27. (3) 、小结 : • 指令格式: JMP 操作数 • 当前IP的值为控制转移指令下一条指令的偏移地址。 • 位移量 = 符号地址的偏移量 - 当前IP的值。 • 符号地址(目标地址)= 当前IP的值 + 位移量

  28. 各控制转移指令允许使用的转移方式

  29. 3、循环控制指令 格式 : LOOPxx  符号地址 执行 操作 : ①(CX) ← (CX)- 1 此操作不影响标志 ② 检查转移条件xx,满足转向目标地址去执行;    不满足执行LOOPxx后一条指令 转移方式 只允许段内直接短方式,跳转范围-128~127

  30. 与条件转移指令不同的是:循环指令隐含 ( CX ) 减1操作。 LOOP指令 …… DEC CX JNZ next …… LOOP next

  31. 循环指令说明: • LOOP退出循环条件是(CX)=0 • LOOPZ和LOOPNZ提供了提前结束循环的可能, • 不一定要等到(CX)=0才退出循环。 • ▲ 在串中查找字符,查到了,就可退出, •      可用LOOPNZ,不相等时继续查找。 • ▲比较两串时,当有字符不等,就可退出,说明两字符串不等。 •      可用LOOPZ,当相等时继续比较。 • ▲执行完 LOOPNZ或LOOPZ后,根据ZF标志的值判断结果 • 对查找字符,ZF=1,说明找到;否则没有找到。 • 对串比较,ZF=1, 说明两串相等;否则不等。

  32. 4、中断指令 • 中断(Interrupt): • 有时当系统运行或程序运行期间遇到某些特殊情况, • 需要计算机自动执行一组专门的例行程序来进行处理。 • 中断例行程序(或中断子程序)(Interrupt routine): 所执行的这组程序就称为中断子程序。 • 种类: • 中断分为内部(软)中断和外部(硬)中断两种。 • 内部中断—如除法运算中除数为0、中断指令引起的中断。 • 外部中断—处理I/O设备与CPU之间的通信。

  33. 中断与过程调用: • 中断是随机事件或异常事件引起,调用则是事先已在程序中安排好 ; • 响应中断请求不仅要保护断点地址,还要保护FLAGS内容; • 调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中。

  34. 六、处理器控制指令 (一)标志处理指令 1、CLC (Clear carry flag ) 清CF标志 2、STC(Set carry flag ) 置CF标志 3、CMC(Complement carry flag ) 对CF求反 4、CLD(Clear direction flag ) 清DF标志 5、STD(Set direction flag ) 置DF标志 6、CLI(Clear interrupt flag ) 清IF标志 7、 STI (Set interrupt enable flag ) 置IF标志 (二)其他处理机控制指令 1、NOP(No operation ) 空操作 2、 HLT(Halt ) CPU暂停状态 3、 WAIT (Wait while pin not asserted ) CPU等待状态 4、 ESC(Escape ) 交权 5、 LOCK(Lock bus ) 总线锁定

  35. 1. 标志处理指令 • 设置和清除标志的指令,只影响指令指定的标志。 CF

  36. 2.其他处理机控制指令 ① 暂停指令HLT 格式 : HLT 执行 : 使CPU处于暂停状态 用于等待外部中断,中断处理结束后, 继续执行HLT后的下一条指令 例 …….. …….. STI ;允许外部中断 HLT ;等待中断 MOV AX, 0 ……..

  37. 只有以下几种情况才能脱离暂停状态: • RESET线上有复位信号 • 在NMI线上有请求 • 在中断允许情形下(IF=1),在INTR线上有请求

  38. ② 空操作指令NOP • 格式 : NOP • 指令不执行任何操作, • 但占有3个时钟周期,继续执行下条指令。 • 其机器码占一个字节单元, 在调试程序时,修改程序用。 • 做短暂延时

  39. ③处理器脱离(processor Escape) *ESC——交权指令(换码) 格式:ESC mem mem——指出一个存储单元, 不能是寄存器和立即数寻找方式 执行:处理器从存储器中读出操作数并放到总线上, 协处理器由此知道要执行什么操作,得到操作数,从而 代替处理器操作。 调动协处理器工作的联络手段,ESC二字节指令。 能区分要调用哪个协处理器进行什么操作; 能指出放在存储器中的操作数。

  40. ④ 处理器等待(Process OR wait) 格式: WAIT ;处理器等待 执行: 处理器等待,CPU处于空操作, 等待外中断发生, 中断结束后,可继续执行下面程序 ⑤ LOCK总线锁定 LOCK实际上是一个指令前缀,可以放在任何一条指令前面。 用来维持总线的锁存信号直到与其联合的指令执行完; CPU与其他协处理器协同工作时,可以避免破坏有用信息。

  41. 4.5 80x86的寻址方式及新增指令 一、虚地址方式下的寻址方式 比例因子 具有比例因子的变址寻址 具有比例因子的基址加变址寻址 具有比例因子的相对基址加变址寻址

  42. 二、80286增强与增加的指令 1 增强的指令 PUSH IMUL 移位指令 2 增加的指令 PUSHA/POPA INS/OUTS 高级语言类

  43. 三、80386/80486增强与增加的指令 1 数据传送 2 算术运算 3 逻辑运算与移位 4 位操作 5 字节置‘1’ 6 Cache管理类

More Related