<<<    Index    >>>
3-53
INSTRUCTION SET REFERENCE
CALL—Call Procedure
Description
This instruction saves procedure linking information on the stack and branches to the procedure
(called procedure) specified with the destination (target) operand. The target operand specifies
the address of the first instruction in the called procedure. This operand can be an immediate
value, a general-purpose register, or a memory location.
This instruction can be used to execute four different types of calls:
•
Near call—A call to a procedure within the current code segment (the segment currently
pointed to by the CS register), sometimes referred to as an intrasegment call.
•
Far call—A call to a procedure located in a different segment than the current code
segment, sometimes referred to as an intersegment call.
•
Inter-privilege-level far call—A far call to a procedure in a segment at a different privilege
level than that of the currently executing program or procedure.
•
Task switch—A call to a procedure located in a different task.
The latter two call types (inter-privilege-level call and task switch) can only be executed in
protected mode. Refer to Section 4.3., Calling Procedures Using CALL and RET in Chapter 4,
Procedure Calls, Interrupts, and Exceptions of the Intel Architecture Software Developer’s
Manual, Volume 1, for additional information on near, far, and inter-privilege-level calls. Refer
to Chapter 6, Task Management, of the Intel Architecture Software Developer’s Manual,
Volume 3, for information on performing task switches with the CALL instruction.
Near Call. 
When executing a near call, the processor pushes the value of the EIP register
(which contains the offset of the instruction following the CALL instruction) onto the stack (for
use later as a return-instruction pointer). The processor then branches to the address in the
current code segment specified with the target operand. The target operand specifies either an
absolute offset in the code segment (that is an offset from the base of the code segment) or a
relative offset (a signed displacement relative to the current value of the instruction pointer in
the EIP register, which points to the instruction following the CALL instruction). The CS
register is not changed on near calls.
Opcode
Instruction
Description
E8 cw
CALL rel16
Call near, relative, displacement relative to next instruction
E8 cd
CALL rel32
Call near, relative, displacement relative to next instruction
FF /2
CALL r/m16
Call near, absolute indirect, address given in r/m16
FF /2
CALL r/m32
Call near, absolute indirect, address given in r/m32
9A cd
CALL ptr16:16
Call far, absolute, address given in operand
9A cp
CALL ptr16:32
Call far, absolute, address given in operand
FF /3
CALL m16:16
Call far, absolute indirect, address given in m16:16
FF /3
CALL m16:32
Call far, absolute indirect, address given in m16:32
<<<    Index    >>>