1 / 13

五、控制转移类指令

五、控制转移类指令. 能够使程序的执行流程发生改变的指令。共有以下四类指令: 1. 无条件转移 ---JMP 转移地址 2. 条件转移 ---JCC 转移地址 3. 循环 —loop , loope,loopne 等 4. 子程序调用 ---call, ret. 1. 无条件转移 JMP 转移指令 操作:有以下几种类型 ⑴ 段内直接短转移 JMP SHORT opr ;(IP)←(IP) + Data8 Data8 是一个字节的补码数 范围:- 128 ~ +127. ⑵ 段内直接近转移 JMP NEAR PTR opr

fergus
Download Presentation

五、控制转移类指令

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. 五、控制转移类指令 能够使程序的执行流程发生改变的指令。共有以下四类指令: 1.无条件转移 ---JMP 转移地址 2.条件转移 ---JCC 转移地址 3.循环—loop,loope,loopne等 4.子程序调用---call, ret

  2. 1.无条件转移 JMP 转移指令 操作:有以下几种类型 ⑴ 段内直接短转移 JMP SHORT opr;(IP)←(IP) + Data8 Data8是一个字节的补码数 范围:-128~+127

  3. ⑵ 段内直接近转移 JMP NEAR PTR opr (IP)←(IP) + Data16 Data16是两个字节的补码数 范围:-32768~+32767 ⑶ 段内间接转移 JMP WORD PTR opr (IP)←寄存器或存储器操作数 ⑷ 段间直接转移 JMP FAR PTR opr 指令中用立即数的形式指出目标位置的段地址和偏移量

  4. ⑸ 段间间接转移 JMP DWORD PTR opr 目标位置的段地址和偏移量保存在存储器中 说明: ① 在汇编语言中通常使用标号表示要转移到的位置。 ② 在DEBUG环境中通常使用直接指出的是将要转移到的位置。 ③ 使用该指令,可以使程序流程改变到任何目标位置。

  5. 2.条件转移 根据判断条件是否成立决定是否转移。按照判断条件的不同分为以下类型:单个标志、无符号数判断、有符号数判断、CX寄存器。 条件转移都是段内直接短转移,即(IP)<=(IP)+Data8类型的转移。 ⑴ 判断单个标志 ZF: JZ(JE), JNZ(JNE) SF: JS, JNS OF: JO, JNO PF: JP, JNP CF: JC, JNC

  6. ⑵ 判断无符号数的大小 助记符中的意义: A:大于,B:小于,E:等于 JB(JNAE),JNB(JAE)同JC,JNC, JBE(JNA),JNBE(JA):判断CF and ZF ⑶ 判断有符号数的大小 助记符中的意义: G:大于,L:小于,E:等于 JL(JNGE): SF xor OF = 1 JNL(JGE): SF xor OF = 0 JLE(JNG):(SF xor OF) and ZF = 1 JNLE(JG):(SF xor OF) and ZF = 0 使用比较大小的指令时,必须区分是 有符号数还是无符号数。

  7. ⑷ 判断CX寄存器 JCXZ: CX=0 3.循环 循环指令的转移也都是段内直接短转移,即(IP)←(IP)+Data8类型的转移。 LOOP循环 判断CX是否等于零,不等于零则循环 LOOPZ(LOOPE)当为零或相等时循环 判断CX是否等于零,不等于零且ZF=1则循环 LOOPNZ(LOOPNE)当不为零或不相等时循环 判断CX是否等于零,不等于零且ZF=0则循环

  8. 操作: ① CX ←CX-1 ② 根据判断结果确定是否循环 说明: ① 循环指令不影响状态标志。 ② 如果目标位置的位移量超出Data8所能够表示的范围,则需要用JMP辅助来完成循环。

  9. 4.子程序调用 CALL 子程序调用指令 用法:CALL dst 说明:由编译程序自动匹配为某种寻址方式 RET 子程序返回指令 用法:RET 段内返回:IP ←[SP], SP ←SP + 2 段间返回:IP ←[SP], SP ←SP + 2, CS ←[SP], SP ←SP + 2 编译程序自动匹配为段内或段间的返回

  10. RET Data16 在RET的基础上,把SP再加上一个字数据: SP ←SP + Data16 Li416.asm Li417.asm

  11. 六、处理器控制指令 1. 标志处理指令 CLC对CF清零, CF ← 0 STC对CF置位, CF ← 1 CMC 对CF取反,CF← CF CLD对DF清零,DF ← 0 STD对DF置位,DF ← 1 CLI对IF清零,IF ← 0 STI 对IF置位,IF ← 1

  12. 2. 外部同步指令 HLT (Halt) 停机 处理器停止工作,等到外部中断到来,中断结束后继续向下执行。 WAIT (Wait) 等待 处理器处于等待状态,等到外部的TEST引脚上的低电平到来。 ESC (Escape) 换码 该指令是一个交权的指令前缀,把指令给协处理处理。 一般和WAIT指令一起使用,通过TEST引脚和协处理器同步。

  13. LOCK (Lock) 封锁 该指令是一个前缀,使得使用此前缀的指令执行时一直维持总线封锁状态。 3. 空操作指令 NOP (No Operation) 空操作 一个字节的机器码,不执行任何操作,常用在调试程序时使用。

More Related