0

Loading/Storing

The IDT is loaded using the LIDT assembly instruction. It expects the location of a IDT description structure:

enter image description here

The offset is the virtual address of the table itself. The size is the size of the table subtracted by 1. This structure can be stored to memory again with the SIDT instruction.

It's in http://wiki.osdev.org/Interrupt_Descriptor_Table

4

1 回答 1

0

IDT 描述符是六字节宽的结构,包含对加载 IDT 条目和中断检查很重要的信息。

假设您已将 PIC 中断映射到 interrupt 0x40,并且您的 IDT 包含0x3F条目(其大小为0x1F8)。每个中断条目都有 8 个字节,所以当 IF(中断标志)被设置并且 IMR(中断屏蔽寄存器,过滤中断的东西)在它的第一个中断上没有屏蔽时,PIC 将发出信号它想要触发打断。处理器询问:“好的,它的编号是多少?”,PIC 回答“0x40”。处理器将计算中断入口的偏移量(从表的开头)并将其与 IDT 描述符结构的第一个字进行比较。如果它大于 IDT 描述符中的值,则会引发异常(我认为它是#GP)。

IDT 描述符结构中的偏移量是指向 IDT 开头的 4 字节地址(不是物理的,分页的)。添加从中断号计算的偏移量会将处理器引导到 IDT 条目的地址。

于 2013-07-18T08:52:58.487 回答