对于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分开?是为了向后兼容吗?

最佳答案

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

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

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

PS:IDT条目只是描述符条目的一种特殊情况。

08-15 23:17