This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
In the x86 assembly language, the JMP
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.[1]
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.)
Example one: Load IP with the new value 0x89AB
, then load CS with 0xACDC
and IP with 0x5578
.
JMP 0x89AB
JMP 0xACDC:0x5578
Example two: Load EIP with the value 0x56789AB1
, only in protected mode or unreal mode.
JMP 0x56789AB1
Example three: Jump to the value stored in the EAX register, only in protected mode.
JMP EAX
The JMP
(Jump) instruction transfers the program's control to a specified location in the code. Unlike function calls, it doesn’t save return information. Instead, it directs execution to a target address, which can be: