在兼容 x86 的处理器上,当 EIP 指向没有读取权限的页面、未映射的页面、无效指令或有效指令试图未经许可访问内存页面时,或未映射,或者除法指令看到分母为零,或者INT执行了一条指令,或者一堆其他事情,它会引发异常。当当前权限级别(CPL) > 0 时,在保护模式下发生异常的情况下,会发生以下情况:
从称为任务状态段的内存部分加载 SS 和 ESP 的值。
将 SS、ESP、EFLAGS、CS 和 EIP 的值压入堆栈。SS 和 ESP 值是以前的值,而不是来自 TSS 的新值。
一些异常还会将错误代码压入堆栈。
从中断描述符表中获取 CS 和 EIP 的值,并将这些值放入 CS 和 EIP。
注意内核已经提前设置好了这些表和段。
然后:
(这不是对 x86 异常处理的详尽参考。这是最常见情况的简要概述。)