4

这些是“程序员可见” x86-64 寄存器:

替代文字
(来源:usenix.org

看不见的寄存器呢?刚才我了解到MMU寄存器,中断描述符表(IDT)使用这些不可见的寄存器。我正在艰难地学习这些东西。是否有任何资源(书籍/文档/等)可以立即为我提供完整的图片?

我知道程序员可见的寄存器并且对它们进行编程很舒服。我只想了解隐形寄存器及其功能。我想得到一张完整的照片。我在哪里可以获得这些信息?

编辑:

我想得到一张完整的照片。我在哪里可以获得这些信息?

这两本书帮助我理解了这些底层细节。

  1. 计算机组织和设计基础 ~ Sivarama P. Dandamudi - 第 1 版 (2003 )
  2. 计算机组织与设计:硬件/软件接口,第 4 版,~ David A. Patterson,John L. Hennessy
4

2 回答 2

3

IDT 是一个中断描述符表,从抽象的角度来看,它包含类似这样的内容,前 18 个中断由处理器保留,接下来的 18 个由 Intel 保留,用于将来验证芯片的架构......

中断处理程序
   0 除以零处理程序
   1 个调试处理程序
   …………
   13 general_exception_handler
   14 page_fault_handler
   …………
   18 machine_check_handler

在这种情况下,处理程序是玩具内核的一部分,每个处理程序都是在启动时设置的,在加载用户空间代码之前。(BIOS 是 16 位代码,也就是实模式代码),内核设置处理程序,切换到 32 位保护模式,当发出任何中断时,根据中断号执行相应的处理程序。例如,如果产生了中断 14,内核将执行 a page_fault_handler,检查页面是否脏并驻留在磁盘上,然后将该页面加载到内存中,修复地址并清除脏位,执行IRET中断返回指令以继续,清除标志....

这是 IDT 工作原理的抽象视图……幕后发生了更复杂的事情……取决于内存管理的体系结构和类型,例如分页/平面/保护/虚拟模式寻址方案……

在此处查看英特尔文档,该文档对英特尔编程提供了出色而全面的视图...

编辑: 回到 DOS 的旧时代(这是 16 位代码,不是很好,完全受内存保护),可以将中断处理程序重新路由到您自己的处理程序,从而覆盖原始 IDT,例如这种中断, 中断 9 是键盘中断(在此上下文中的 BIOS 中断),使用getvect(...)andsetvect(...)调用,您还可以处理一些(不是所有的处理器中断,特别是 IDT 0 用于除以零)......尽管那些 BIOS 中断它们在外观上与处理器中断非常相似,它们有一个共同的特征,两者都有中断向量表(正如当时所知)。由于 BIOS 中断重新路由到 TSR 的处理程序,这就是 TSR(终止驻留)程序能够在 DOS 中保持重入的方式......

于 2010-03-14T14:44:47.760 回答
1

您需要研究您感兴趣的特定处理器的处理器参考手册。这是安腾处理器参考手册

于 2010-03-14T14:41:58.477 回答