注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。

本课时主要介绍x86中的异常和中断概念,以及简要的了解处理流程,并且通过一段小的代码展示了如何触发特定异常,以及当没有对异常进行处理时会发生何种现像。

中断和异常

无论是中断和异常,都指的是在程序运行中发生的一些事情,只不过有些是CPU内部产生,一些则是CPU外部。

  • 异常:由于 CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界、除0异常)。通常由于执行了现行指令所引起的
  • 中断:由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等通常与现行指令无关,由外部事件引起

在课程中,为方便起见,我经常不会对异常和中断进行明显的区域,即有时会用异常或中断代称二者。

处理流程

基本的处理流程与其它类型的CPU上是一样的,大致流程为:

  1. 中断当前正在运行的程序
  2. 从向量表中取出处理程序的首地址,跳转到首地址运行;有些CPU中,向量表中存储的是跳转指令,则跳转到该指令处运行
  3. 执行完程序程序后,继续从之前中断地位置运行。

image.png

参考资料

  • 课程附带的intel编程文档卷3:Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3 (3A, 3B, 3C & 3D): System Programming Guide