x86 Assembly Language Reference Manual

Near Call -- Procedure Call (call)

call    	disp32
call    	*r/m32 

near call rel{16|32}

near call r/m{16|32}


The call instruction calls near procedures using a full pointer. call causes the procedure named in the operand to be executed. When the called procedure completes, execution flow resumes at the instruction following the call instruction (see the return instruction).

call rel{16|32} adds a signed offset to address of the instruction following the call instruction to determine the destination; that is, the displacement is relative to the next instruction. The displacement value is stored in the EIP register. For rel16, the upper 16 bits of EIP are cleared to zero resulting in an offset value that does not exceed 16 bits.

call r/m{16|32} specifies a register or memory location from which the absolute segment offset is fetched. The offset of the instruction following the call instruction is pushed onto the stack. After the procedure completes, the offset is popped by a near ret instruction within the procedure.

Both forms of the call instruction have no affect on the CS register.


Program counter minus 0x11111111.

call .-0x11111111

Add a signed offset value to the address of the next instruction.

call *4(%edi)