JMP (x86 instruction)

In the x86 assembly language, the   instruction performs an unconditional jump. Such an instruction transfers the flow of execution by changing the program counter. There are a number of different opcodes that perform a jump; depending on whether the processor is in real mode or protected mode, and an override instruction is used, the instructions may take 16-bit, 32-bit, or segment:offset pointers.

There are many different forms of jumps: relative, conditional, absolute and register-indirect jumps.

The following examples illustrate: (Note that although the first and second jumps are relative, commonly the destination address is shown instead of the relative offset as encoded in the opcode.)
 * 1) a relative jump with a 16-bit pointer;
 * 2) a long jump (inter-segment), a relative jump with a 32-bit pointer;
 * 3) and a register-indirect absolute jump using the EAX register.

Example one: Load IP with the new value, then load CS with   and IP with.

Example two: Load EIP with the value, only in protected mode or unreal mode.

Example three: Jump to the value stored in the EAX register, only in protected mode.