无条件跳跃
jmp a_label ;Jump to a_label
jmp bx ;Jump to address in BX
jmp WORD [aPointer] ;Jump to address in aPointer
jmp 7c0h:0000h ;Jump to segment 7c0h and offset 0000h
jmp FAR WORD [aFarPointer] ;Jump to segment:offset in aFarPointer
相对接近跳跃
jmp a_label 是:
- near
它只指定目标逻辑地址的偏移部分。该段被假定为CS。 - 相对
该指令语义是跳跃相对字节前进 1 从下一个指令地址或IP = IP + rel。
该指令编码为 EB <rel8> 或 EB <rel16/32>,汇编程序选择最合适的形式,通常更喜欢较短的形式。
每个汇编程序覆盖是可能的,例如使用 NASM jmp SHORT a_label,jmp WORD a_label 和 jmp DWORD a_label 生成三种可能的形式。
绝对间接近距离跳跃
jmp bx 和 jmp WORD [aPointer] 是:
- near
它们只指定目标逻辑地址的偏移部分。该段假设为CS。 - 绝对间接
指令的语义是跳转到 reg 或 mem 或IP = reg,IP = mem中的地址。
该指令被编码为 FF /4,对于存储器间接,操作数的大小被确定为每隔一个存储器访问。
绝对远远的跳跃
jmp 7c0h:0000h 是:
-
far
它指定逻辑地址的两个部分 :段和偏移量。 -
absolute 指令的语义跳转到地址段:offset 或
CS = segment, IP = offset。
该指令根据代码大小编码为 EA <imm32/48>。
可以在某些汇编程序中选择两种形式,例如使用 NASM jmp 7c0h: WORD 0000h 和 jmp 7c0h: DWORD 0000h 生成第一种和第二种形式。
绝对间接远距离跳跃
jmp FAR WORD [aFarPointer] 是:
-
far 它指定逻辑地址的两个部分 :段和偏移量。
-
绝对间接指令的语义是跳转到段: 存储在 mem 2 或
CS = mem[23:16/32], IP = [15/31:0]中的偏移量。
该指令编码为 FF /5,操作数的大小可以是具有大小说明符的控制器。
在 NASM 中,有点不直观,它们是 16:16 操作数的 jmp FAR WORD [aFarPointer] 和 16:32 操作数的 jmp FAR DWORD [aFarPointer] 。
缺少跳跃
-
接近绝对
可以用近间接跳跃模拟。mov bx, target ;BX = absolute address of target jmp bx -
远亲
无论如何都没有意义或太狭隘。
1 两个补码用于指定有符号偏移,从而向后跳转。
2 可以是 seg16:off16 或 seg16:off32 ,大小为 16:16 和 16:32 。