Intel 64 and IA-32 Architectures Software Developers Manual Volume 1, Basic Architecture

6-4 Vol. 1
PROCEDURE CALLS, INTERRUPTS, AND EXCEPTIONS
6.2.4 Procedure Linking Information
The processor provides two pointers for linking of procedures: the stack-frame base
pointer and the return instruction pointer. When used in conjunction with a standard
software procedure-call technique, these pointers permit reliable and coherent
linking of procedures.
6.2.4.1 Stack-Frame Base Pointer
The stack is typically divided into frames. Each stack frame can then contain local
variables, parameters to be passed to another procedure, and procedure linking
information. The stack-frame base pointer (contained in the EBP register) identifies a
fixed reference point within the stack frame for the called procedure. To use the
stack-frame base pointer, the called procedure typically copies the contents of the
ESP register into the EBP register prior to pushing any local variables on the stack.
The stack-frame base pointer then permits easy access to data structures passed on
the stack, to the return instruction pointer, and to local variables added to the stack
by the called procedure.
Like the ESP register, the EBP register automatically points to an address in the
current stack segment (that is, the segment specified by the current contents of the
SS register).
6.2.4.2 Return Instruction Pointer
Prior to branching to the first instruction of the called procedure, the CALL instruction
pushes the address in the EIP register onto the current stack. This address is then
called the return-instruction pointer and it points to the instruction where execution
of the calling procedure should resume following a return from the called procedure.
Upon returning from a called procedure, the RET instruction pops the return-instruc-
tion pointer from the stack back into the EIP register. Execution of the calling proce-
dure then resumes.
The processor does not keep track of the location of the return-instruction pointer. It
is thus up to the programmer to insure that stack pointer is pointing to the return-
instruction pointer on the stack, prior to issuing a RET instruction. A common way to
reset the stack pointer to the point to the return-instruction pointer is to move the
contents of the EBP register into the ESP register. If the EBP register is loaded with
the stack pointer immediately following a procedure call, it should point to the return
instruction pointer on the stack.
The processor does not require that the return instruction pointer point back to the
calling procedure. Prior to executing the RET instruction, the return instruction
pointer can be manipulated in software to point to any address in the current code
segment (near return) or another code segment (far return). Performing such an
operation, however, should be undertaken very cautiously, using only well defined
code entry points.