無條件跳躍

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 。