無條件跳躍

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_labeljmp WORD a_labeljmp DWORD a_label 生成三種可能的形式。

絕對間接近距離跳躍

jmp bxjmp WORD [aPointer] 是:

  • near
    它們只指定目標邏輯地址的偏移部分。該段假設為 CS
  • 絕對間接
    指令的語義是跳轉到 regmemIP = regIP = mem 中的地址。

該指令被編碼為 FF /4,對於儲存器間接,運算元的大小被確定為每隔一個儲存器訪問。

絕對遠遠的跳躍

jmp 7c0h:0000h 是:

  • far
    它指定邏輯地址的兩個部分 :段和偏移量。

  • absolute 指令的語義跳轉到地址段:offsetCS = segment, IP = offset

該指令根據程式碼大小編碼為 EA <imm32/48>
可以在某些彙編程式中選擇兩種形式,例如使用 NASM jmp 7c0h: WORD 0000hjmp 7c0h: DWORD 0000h 生成第一種和第二種形式。

絕對間接遠距離跳躍

jmp FAR WORD [aFarPointer] 是:

  • far 它指定邏輯地址的兩個部分 :段和偏移量。

  • 絕對間接指令的語義是跳轉到段: 儲存在 mem 2CS = 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:off16seg16:off32 ,大小為 16:1616:32