assembly - 程序员 "Invisible"寄存器怎么样?

标签 assembly x86 x86-64 cpu-architecture

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

alt text
(来源:usenix.org)

隐形寄存器呢?刚刚才知道MMU寄存器,Interrupt Descriptor Table(IDT)使用了这些不可见的寄存器。我正在艰难地学习这些东西。是否有任何资源(书籍/文档/等)可以立即为我提供完整的图片?

我知道程序员可见的寄存器并且很容易使用它们进行编程。我只想了解隐形寄存器及其功能。我想得到一个完整的图片。我在哪里可以得到这些信息?

编辑:

I want to get a complete picture. Where can I get this info?



这两本书帮助我了解了所有这些低级细节。
  • Fundamentals of Computer Organization and Design ~ Sivarama P. Dandamudi - 1 edition (2003)
  • Computer Organization and Design : The Hardware/Software Interface, 4th Edition, ~ David A. Patterson, John L. Hennessy
  • 最佳答案

    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/

    相关文章:

    windows - 一个简单的 MASM32 程序的奇怪行为

    linux - 在汇编中使用 printf 会导致管道输出为空,但在终端上有效

    windows - ld 链接器的输出可执行文件比 golink 输出可执行文件大,为什么?

    x86 - AVX 或 AVX2 是否支持 256 位字符串指令和无符号短整型的 mullo?

    c - 在 C 源代码中省略内联 ASM 代码

    macos - 无法在 Mac OS X 上编译兼容 i386 的 ffmpeg dylib

    assembly - 从 64 位 asm 调用 Printf 时如何传递参数?

    c++ - SetThreadContext x64 volatile 寄存器

    c - 将寄存器的内容读入 C 变量时的奇怪行为

    performance - 通过 mov, xor 交换变量的成本