注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。
本课时的主要目标是为所有异常提供一个初始化的配置表项,以实现对所有异常的缺省处理。
IDT表项的设置
在前面的课时中已经重新设置了GDT表,且已经知道所采用的段管理模型为平坦模型,即只提供了两个段,一个是代码段+数据段。
代码具体如下,可以看到其选择子分别为:KERNEL_SELECTOR_DS和KERNEL_SELECTOR_CS。这两个段的起始地址均从0开始。
因此,根据上述配置和下面的图示,可知在配置IDT表项时,需要将IDT表项中的segment selector设置为KERNEL_SELECTOR_DS,偏移量设置为函数的入口地址即可。
中断现场保护
在课程中,为了简单起见,直接将所有的寄存器进行压栈保护,压入方法为中断发生时,CPU会自动保存一部分,其余在中断程序程序中,通过push指令压入一部分。
参考资料第205页
其中pusha指令压入的寄存器为: EAX, ECX, EDX, EBX, original ESP, EBP, ESI, and EDI.
参考资料
- 课程附带的intel编程文档卷3:Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3 (3A, 3B, 3C & 3D): System Programming Guide