为什么中断描述符表(IDT)中的偏移量位分为两个字段?

时间:2018-10-04 04:47:01

标签: x86 cpu-architecture

对于IA-32体系结构,IDT条目具有以下格式:

struct IDTDescr {
   uint16_t offset_1; // offset bits 0..15
   uint16_t selector; // a code segment selector in GDT or LDT
   uint8_t zero;      // unused, set to 0
   uint8_t type_attr; // type and attributes, see below
   uint16_t offset_2; // offset bits 16..31
};

为什么offset_1offset_2分开?是为了向后兼容吗?

2 个答案:

答案 0 :(得分:3)

与8086 IVT(中断向量表)条目的向后兼容性。它们由一个16位PC值和一个16位CS值组成-与IDT条目的前两个字段完全相同。

答案 1 :(得分:2)

字段的异常布局可以追溯到保持386保护模式与80286保护模式向上兼容的需要。在386需要更大的场的情况下,这些场变成了286上未使用的空间。这导致您现在看到的相当混乱的布置,

这很有用,因为在早期,通常在386系统上运行286操作系统。

在《 iAPX 286操作系统编写者指南》中,您甚至在图2.6 Gate Descriptor中甚至看到标记为“为iAPX 386保留的字段必须为零”的字段。

PS:IDT条目只是描述符条目的特例。

相关问题