Assembly 程序员呢;无形的;登记?

Assembly 程序员呢;无形的;登记?,assembly,x86,x86-64,cpu-architecture,Assembly,X86,X86 64,Cpu Architecture,这些是“程序员可见”x86-64寄存器: (来源:) 隐形寄存器呢?刚才我了解到MMU寄存器,中断描述符表(IDT)使用这些不可见的寄存器。我正在用艰苦的方式学习这些东西。是否有任何资源(书籍/文档等)可以立即为我提供完整的信息 我了解程序员可见的寄存器,并习惯于使用它们进行编程。我只想了解不可见寄存器及其功能。我想要一张完整的照片。我在哪里可以得到这些信息 编辑: 我想要一张完整的照片。我在哪里可以得到这些信息 这两本书帮助我理解了这些低级的细节 您需要学习您感兴趣的特定处理器的处理器参

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


(来源:)

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

我了解程序员可见的寄存器,并习惯于使用它们进行编程。我只想了解不可见寄存器及其功能。我想要一张完整的照片。我在哪里可以得到这些信息

编辑:

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

这两本书帮助我理解了这些低级的细节


  • 您需要学习您感兴趣的特定处理器的处理器参考手册。以下是。

    IDT是一个中断描述符表,从抽象视图中包含类似的内容,前18个中断由处理器保留,后18个由Intel保留,以备将来验证芯片的体系结构

    Interrupt Handler 0 divide_by_zero_handler 1 debug_handler .. ... 13 general_exception_handler 14 page_fault_handler .. ... 18 machine_check_handler 中断处理器 0除以0处理程序 1调试处理器 .. ... 13一般异常处理程序 14页\u故障\u处理程序 .. ... 18机器检查处理器 在此上下文中,处理程序是玩具内核的一部分,每个处理程序都是在引导时设置的,在加载用户登录代码之前。(BIOS是16位代码,也称为实模式代码),内核设置处理程序,切换到32位保护模式,当发出任何中断时,根据中断号执行相应的处理程序。例如,如果生成了中断14,内核将执行
    page\u fault\u handler
    ,检查页面是否脏并驻留在磁盘上,然后将该页面加载到内存中,修复地址并清除脏位,执行
    IRET
    中断返回指令以继续,清除标志

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

    在这里看一看文档,这些文档提供了英特尔编程的极好和全面的视图

    编辑:
    回到DOS的旧时代(它是16位代码,没有很好的内存保护),可以将中断处理程序重新路由到您自己的处理程序,从而覆盖原始IDT,例如,使用
    getvect(…)的中断9,即键盘中断(在此上下文中为BIOS中断)
    setvect(…)
    调用,您也可以处理一些(并非所有的处理器中断,特别是IDT 0表示除以零)…尽管这些BIOS中断在外观上与处理器中断非常相似,但它们有一个共同的功能,它们都有中断向量表(正如当时所知)。这就是为什么TSR(Terminate Stay Resident,终止驻留)程序能够在DOS中保持重新进入,因为BIOS中断被重新路由到TSR的处理程序…

    如果它们是不可见的,那么你为什么要在意呢?它们是特定芯片的一个实现细节,在下一步中可能会发生变化。好吧,具体了解MMU(它是如何工作的?)和IDT,了解它如何管理中断。我对这些评论感到惊讶。我同意你们的观点,一个人不应该依赖于“未记录的/看不见的”东西。但你们为什么对这个观点如此严格。作为一个内线的爱好者。为什么我们不应该了解这些事情?我希望你们知道“保护模式寻址”和“分段地址转换”。你有没有想过CPU是如何管理这些东西的?它使用这些不可见的寄存器来实现这一点。约翰·桑德斯:对引擎盖下的事物如何运作感兴趣并没有什么错(而且很多是对的)。您的论点相当于声称使用C或任何更高级语言编写代码的人不应该学习汇编,因为它是一个实现细节。您不能通过(标准)C直接访问任何CPU寄存器,就像您不能通过汇编访问不可见寄存器一样。这并不意味着想要了解什么是寄存器以及它们如何适应计算机体系结构是错误的,或者在较低的层次上,想要了解不可见寄存器是如何使用的。@John:想要了解特定于实现的东西没有错,只要你知道是这样的。此外,被认为是特定于实现的内容完全取决于您工作的抽象级别。如果您在C代码级别工作,那么机器指令和可见CPU寄存器是一个特定于实现的细节(因此我在第一篇评论中指出了等效性)。问题是关于x86-64而不是安腾。您甚至没有提到IDTR,由加载的内部IDT基址/限制寄存器,告诉CPU在何处查找IDT。我想这就是@claws在说IDT使用内部寄存器时的意思吧?其他内部reg包括在保护模式下将选择器写入段reg时从GDT加载的段基本/限制设置。(或对于FS/GS,但通过带有
    wrmsr
    的MSR修改基)此外,在实模式下,您还有一个IVT(中断向量表,因为它们只是指针而不是描述符)。你后来提到了这一点,但它不仅仅是一个完全相同的东西的不同名称。顺便说一句,软件中断与异步硬件生成的中断共享相同的中断号“地址空间”。e、 我想你真的可以运行
    int9
    指令来运行系统