<<<    Index    >>>
4-16
PROCEDURE CALLS, INTERRUPTS, AND EXCEPTIONS
If a stack switch does occur, the processor does the following:
1.Temporarily saves (internally) the current contents of the SS, ESP, EFLAGS, CS, and EIP
registers.
2.Loads the segment selector and stack pointer for the new stack (that is, the stack for the
privilege level being called) from the TSS into the SS and ESP registers and switches to
the new stack.
3.Pushes the temporarily saved SS, ESP, EFLAGS, CS, and EIP values for the interrupted
procedure’s stack onto the new stack.
4.Pushes an error code on the new stack (if appropriate).
5.Loads the segment selector for the new code segment and the new instruction pointer
(from the interrupt gate or trap gate) into the CS and EIP registers, respectively.
6.If the call is through an interrupt gate, clears the IF flag in the EFLAGS register.
7.Begins execution of the handler procedure at the new privilege level.
A return from an interrupt or exception handler is initiated with the IRET instruction. The IRET
instruction is similar to the far RET instruction, except that it also restores the contents of the
EFLAGS register for the interrupted procedure:
When executing a return from an interrupt or exception handler from the same privilege level as
the interrupted procedure, the processor performs these actions:
1.Restores the CS and EIP registers to their values prior to the interrupt or exception.
2.Restores the EFLAGS register.
3.Increments the stack pointer appropriately
4.Resumes execution of the interrupted procedure.
When executing a return from an interrupt or exception handler from a different privilege level
than the interrupted procedure, the processor performs these actions:
1.Performs a privilege check.
2.Restores the CS and EIP registers to their values prior to the interrupt or exception.
3.Restores the EFLAGS register.
4.Restores the SS and ESP registers to their values prior to the interrupt or exception,
resulting in a stack switch back to the stack of the interrupted procedure.
5.Resumes execution of the interrupted procedure.
<<<    Index    >>>