3.3.5程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令
1 3.3.5 程序控制指令 控制转移指令分为: –转移指令 –循环控制指令 –调用和返回指令 –中断指令
1.转移指令 转移指令的实质:改变IP(或CS的内容 >所有转移指令不会影响标志位 分为无条件转移和条件转移两种
2 ➢转移指令的实质:改变IP(或CS)的内容。 ➢所有转移指令不会影响标志位。 ➢分为无条件转移和条件转移两种。 1.转移指令
(1)无条件转移指令-JMP 本指令无条件转移到指定的目标地址,以执 从该地址开始的程序段。根据设置CS、IP的方 法,JMP指令分成4种情况 ①段内直接转移: JMP disp 指令中给出的8/16位的位移量加到IP。CS保持不变 ②段内间接转移: JMP reg/mem reg/mem中的16位偏移地址送IP。CS保持不变 ③段间直接转移 JMP Segment: offset 指令中给出的16位的段和16位的偏移地址送到CS和P ④段间间接转移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP
3 (1) 无条件转移指令 - JMP 本指令无条件转移到指定的目标地址,以执行 从该地址开始的程序段。根据设置CS、IP的方 法,JMP指令分成4种情况。 ① 段内直接转移: JMP disp 指令中给出的8/16位的位移量加到IP。CS保持不变。 ② 段内间接转移: JMP reg/mem reg/mem中的16位偏移地址送IP。CS保持不变。 ③ 段间直接转移 JMP segment:offset 指令中给出的16位的段和16位的偏移地址送到CS和IP。 ④ 段间间接转移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP
①段内直接转移 转移的目标地址由指令直接给出。指令中 给出的目标地址实际上是一个相对于IP的 位移量: 位移量转移范围 汇编语言中格式 8位-128~+127 JMP SHORT OPRD 16157-32768+32767 JMP NEAR PTR OPRD 例:JMP0120H 直接转向0120H JMP SHORT LP ;转向LP JMP NEAR PTR BBB;转向BBB 由于是段内转移,故转移后CS内容保持不变
4 转移的目标地址由指令直接给出。指令中 给出的目标地址实际上是一个相对于IP的 位移量: 位移量 转移范围 汇编语言中格式 8位 -128~+127 JMP SHORT OPRD 16位 -32768~+32767 JMP NEAR PTR OPRD 例:JMP 0120H ;直接转向0120H JMP SHORT LP ;转向LP JMP NEAR PTR BBB ;转向BBB 由于是段内转移,故转移后CS内容保持不变 ① 段内直接转移
②段内间接转移 转移的目标地址由寄存器或存储单元的内容 给出。 例1: JMP SI 若(SⅠ)=1200H,则指令执行后,(IP)=120OH, 于是转向代码段的偏移地址120OH处开始执行 注意:目标地址以段内偏移的形式给出,历不是相对于P的 位移量,所以它是一个16位的操作数
5 ②段内间接转移 转移的目标地址由寄存器或存储单元的内容 给出。 例1:JMP SI 若(SI)=1200H,则指令执行后,(IP)=1200H, 于是转向代码段的偏移地址1200H处开始执行。 注意:目标地址以段内偏移的形式给出,而不是相对于IP的 位移量,所以它是一个16位的操作数
例2:JMP[BX+DI 设指令执行前 (DS)=3000H,(BⅩ)=1300H, (DI)=1200H,(32500H=2350H 则指令执行后:(IP)=2350H 在汇编语言中,段内间接寻址通常写成: JMP WORD PTRIBX+DI] 表示所取得的目标地址是一个字
6 例2:JMP [BX+DI] 设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H 在汇编语言中,段内间接寻址通常写成: JMP WORD PTR[BX+DI] 表示所取得的目标地址是一个字
③段间直接转移 在指令中直接给出要转移到的目的段地址和 偏移地址 例:JMP2000H:1000H 执行时,(IP)←1000H,(CS)←2000H 注:直接地址为符号地址时,段间直接转移 指令中的符号地址前应加操作符 FAR PTR 例: JMP FAR PTR far label 其中的far1abel为远类型的标号
7 ③段间直接转移 在指令中直接给出要转移到的目的段地址和 偏移地址。 例:JMP 2000H:1000H 执行时,(IP)←1000H,(CS)←2000H 注:直接地址为符号地址时,段间直接转移 指令中的符号地址前应加操作符FAR PTR。 例:JMP FAR PTR far_label 其中的far_label为远类型的标号
④段间间接转移 转移的目的地址(段和偏移)在两个相邻的 字存储单元中。例如: JMP DWORD PTRLSI] 设指令执行前:DS)=4000H,(SI=1212H, (41212H=100OH,(41214H)=4OOH 则指令执行后:(IP)=1000H,(CS)=4A0OH 于是转到4B000H处开始执行指令 例中的 DWORD PTR表示转移地址是一个双字
8 转移的目的地址(段和偏移)在两个相邻的 字存储单元中。例如: JMP DWORD PTR[SI] 设指令执行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到4B000H处开始执行指令。 例中的DWORD PTR表示转移地址是一个双字。 ④段间间接转移
JMP DWORD PTR[S的机器码 11101100 DS: SI 4000DS +)1212SI 41212 41212 00 41213 →1000IP 10 41214 00 41215 →4A00CS 4A 段间间接转移操作示意图
9 4000 +) 1212 41212 DS SI 00 10 00 4A 41212 41213 41214 41215 1000 4A00 IP CS 段间间接转移操作示意图 11111111 11101100 JMP DWORD PTR [SI]的机器码 DS:[SI]
(2)条件转移指令-Jxx ●条件转移指令可实现程序的条件分支。 ●条件转移指令根据标志位的状态来决定是否 进行分支转移 ●格式: Jxx labe|;xx为条件名称缩写 ●指令的转移范围为-128~+127字节 主要的条件转移指令参见p142表3-7
10 ⚫条件转移指令可实现程序的条件分支。 ⚫条件转移指令根据标志位的状态来决定是否 进行分支转移。 ⚫格式: JXX label ;xx为条件名称缩写 ⚫指令的转移范围为-128~+127字节。 ⚫主要的条件转移指令参见p142表3-7。 (2)条件转移指令 - JXX