無條件跳躍
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 。