<<<    Index    >>>
4-4
PROCEDURE CALLS, INTERRUPTS, AND EXCEPTIONS
the segmentÂ’s descriptor. When this flag is clear, the default address-size attribute is 16; when
the flag is set, the address-size attribute is 32.
4.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
4.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). 
4.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-instruction pointer from the stack back into the
EIP register. Execution of the calling procedure 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 proce-
dure. 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.
<<<    Index    >>>