这些是 “程序员可见” x86-64 寄存器:
(来源:usenix.org)
隐形寄存器呢?刚刚才知道MMU寄存器,Interrupt Descriptor Table(IDT)使用了这些不可见的寄存器。我正在艰难地学习这些东西。是否有任何资源(书籍/文档/等)可以立即为我提供完整的图片?
我知道程序员可见的寄存器并且很容易使用它们进行编程。我只想了解隐形寄存器及其功能。我想得到一个完整的图片。我在哪里可以得到这些信息?
编辑:
I want to get a complete picture. Where can I get this info?
这两本书帮助我了解了所有这些低级细节。
最佳答案
IDT是一个中断描述符表,从抽象的角度来看,它包含这样的东西,前18个中断由处理器保留,接下来的18个由英特尔保留用于 future 验证芯片架构......
中断处理程序
0 除以零处理程序
1 debug_handler
…………
13 general_exception_handler
14 page_fault_handler
…………
18 machine_check_handler
在这种情况下,处理程序是玩具内核的一部分,每个处理程序都在启动时设置,在加载用户代码之前。 (BIOS 是 16 位代码又名实模式代码),内核设置处理程序,切换到 32 位保护模式,当发出任何中断时,根据中断编号执行适当的处理程序。例如,如果中断 14 产生,内核将执行 page_fault_handler
,检查页面是否脏并驻留在磁盘上,然后将该页面加载到内存中,修复地址并清除脏位,执行 IRET
中断返回指令继续,清除标志......
这是 IDT 工作原理的抽象 View ......幕后有更复杂的事情发生......取决于内存管理的架构和类型,例如分页/平面/ protected /虚拟模式寻址方案......
看看这里 Intel提供了对英特尔编程的出色而透彻的看法的文档...
编辑:
回到 DOS 的旧时代(它是 16 位代码,不是很好,完全受内存保护),可以将中断处理程序重新路由到您自己的处理程序,从而覆盖原始 IDT,例如这样的中断,Interrupt 9 这是使用 getvect(...)
的键盘中断(在此上下文中为 BIOS 中断)和 setvect(...)
调用,你也可以处理一些(不是所有的处理器中断,特别是,IDT 0 被零除)......尽管这些 BIOS 中断在外观上与处理器中断非常相似,但它们有一个共同的特征,两者都做到有中断向量表(当时已知)。由于 BIOS 中断重新路由到 TSR 的处理程序,这就是 TSR(Terminate Stay Resident)程序能够在 DOS 中保持可重入的方式……
关于assembly - 程序员 "Invisible"寄存器怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2442457/