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
is:
CS
.IP = IP + rel
.The instruction is encoded as either EB <rel8>
or EB <rel16/32>
, the assembler picking up the most appropriate form, usually preferring a shorter one.
Per assembler overriding is possible, for example with NASM jmp SHORT a_label
, jmp WORD a_label
and jmp DWORD a_label
generate the three possible forms.
jmp bx
and jmp WORD [aPointer]
are:
CS
.IP = reg
, IP = mem
.The instruction is encoded as FF /4
, for memory indirect the size of the operand is determined as for every other memory access.
jmp 7c0h:0000h
is:
far
It specifies both parts of the logical address: the segment and the offset.
absolute
The semantic of the instruction is jump to the address segment:offset or CS = segment, IP = offset
.
The instruction is encoded as EA <imm32/48>
depending on the code size.
It is possible to choose between the two forms in some assembler, for example with NASM jmp 7c0h: WORD 0000h
and jmp 7c0h: DWORD 0000h
generate the first and second form.
jmp FAR WORD [aFarPointer]
is:
far It specifies both parts of the logical address: the segment and the offset.
Absolute indirect
The semantic of the instruction is jump to the segment:offset stored in mem2 or CS = mem[23:16/32], IP = [15/31:0]
.
The instruction is encoded as FF /5
, the size of the operand can be controller with the size specifiers.
In NASM, a little bit non intuitive, they are jmp FAR WORD [aFarPointer]
for a 16:16 operand and jmp FAR DWORD [aFarPointer]
for a 16:32 operand.
near absolute
Can be emulated with a near indirect jump.
mov bx, target ;BX = absolute address of target
jmp bx
far relative
Make no sense or too narrow of use anyway.
1 Two complement is used to specify a signed offset and thus jump backward.
2 Which can be a seg16:off16 or a seg16:off32, of sizes 16:16 and 16:32.