五、控制转移类指令
This presentation is the property of its rightful owner.
Sponsored Links
1 / 13

五、控制转移类指令 PowerPoint PPT Presentation


  • 81 Views
  • Uploaded on
  • Presentation posted in: General

五、控制转移类指令. 能够使程序的执行流程发生改变的指令。共有以下四类指令: 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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


3322623

五、控制转移类指令

能够使程序的执行流程发生改变的指令。共有以下四类指令:

1.无条件转移 ---JMP 转移地址

2.条件转移 ---JCC 转移地址

3.循环—loop,loope,loopne等

4.子程序调用---call, ret


3322623

1.无条件转移

JMP 转移指令

操作:有以下几种类型

⑴ 段内直接短转移

JMP SHORT opr;(IP)←(IP) + Data8

Data8是一个字节的补码数

范围:-128~+127


3322623

⑵ 段内直接近转移

JMP NEAR PTR opr

(IP)←(IP) + Data16

Data16是两个字节的补码数

范围:-32768~+32767

⑶ 段内间接转移

JMP WORD PTR opr

(IP)←寄存器或存储器操作数

⑷ 段间直接转移

JMP FAR PTR opr

指令中用立即数的形式指出目标位置的段地址和偏移量


3322623

⑸ 段间间接转移

JMP DWORD PTR opr

目标位置的段地址和偏移量保存在存储器中

说明:

① 在汇编语言中通常使用标号表示要转移到的位置。

② 在DEBUG环境中通常使用直接指出的是将要转移到的位置。

③ 使用该指令,可以使程序流程改变到任何目标位置。


3322623

2.条件转移

根据判断条件是否成立决定是否转移。按照判断条件的不同分为以下类型:单个标志、无符号数判断、有符号数判断、CX寄存器。

条件转移都是段内直接短转移,即(IP)<=(IP)+Data8类型的转移。

⑴ 判断单个标志

ZF: JZ(JE), JNZ(JNE)

SF: JS, JNS

OF: JO, JNO

PF: JP, JNP

CF: JC, JNC


3322623

⑵ 判断无符号数的大小

助记符中的意义: 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

使用比较大小的指令时,必须区分是

有符号数还是无符号数。


3322623

⑷ 判断CX寄存器

JCXZ: CX=0

3.循环

循环指令的转移也都是段内直接短转移,即(IP)←(IP)+Data8类型的转移。

LOOP循环

判断CX是否等于零,不等于零则循环

LOOPZ(LOOPE)当为零或相等时循环

判断CX是否等于零,不等于零且ZF=1则循环

LOOPNZ(LOOPNE)当不为零或不相等时循环

判断CX是否等于零,不等于零且ZF=0则循环


3322623

操作:

① CX ←CX-1

② 根据判断结果确定是否循环

说明:

① 循环指令不影响状态标志。

② 如果目标位置的位移量超出Data8所能够表示的范围,则需要用JMP辅助来完成循环。


3322623

4.子程序调用

CALL 子程序调用指令

用法:CALL dst

说明:由编译程序自动匹配为某种寻址方式

RET 子程序返回指令

用法:RET

段内返回:IP ←[SP], SP ←SP + 2

段间返回:IP ←[SP], SP ←SP + 2,

CS ←[SP], SP ←SP + 2

编译程序自动匹配为段内或段间的返回


3322623

RET Data16

在RET的基础上,把SP再加上一个字数据:

SP ←SP + Data16

Li416.asm

Li417.asm


3322623

六、处理器控制指令

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


3322623

2. 外部同步指令

HLT (Halt) 停机

处理器停止工作,等到外部中断到来,中断结束后继续向下执行。

WAIT (Wait) 等待

处理器处于等待状态,等到外部的TEST引脚上的低电平到来。

ESC (Escape) 换码

该指令是一个交权的指令前缀,把指令给协处理处理。

一般和WAIT指令一起使用,通过TEST引脚和协处理器同步。


3322623

LOCK (Lock) 封锁

该指令是一个前缀,使得使用此前缀的指令执行时一直维持总线封锁状态。

3. 空操作指令

NOP (No Operation) 空操作

一个字节的机器码,不执行任何操作,常用在调试程序时使用。


  • Login