
GDTRGlobal Descriptor Table Register全局描述符表寄存器是 x86 处理器内部的一个专用寄存器它的唯一职责就是告诉 CPU 全局描述符表GDT在哪里。形象地理解GDTR 相当于存储了 GDT 的“定位信息”让 CPU 在任何时候都能根据其中的数据找到并访问 GDT。核心功能存储 GDT 的位置与大小GDTR 存储了 GDT 两个最关键的信息字段大小描述基地址Base Address32位保护模式/ 64位长模式GDT 在线性地址空间中的起始地址。界限Limit16位GDT 的字节大小减 1即 GDT 的最大有效偏移。如何加载和读取 GDTRGDTR 的内容由两个专用指令控制指令功能特权级lgdt将内存中的一个 6/10 字节数据加载到 GDTR从而设置 GDT 的基地址和界限。特权指令Ring 0sgdt将 GDTR 的当前值存储到内存中用于读取当前的 GDT 信息。可在任何特权级下使用常用于调试与段选择子Segment Selector的联动当执行一条访问内存的指令时CPU 会这样使用 GDTR查看段寄存器从CS、DS等段寄存器中读取段选择子一个 16 位的索引。计算偏移根据段选择子中的索引值×8得到在 GDT 中的偏移量。获取描述符将GDTR 中的基地址加上这个偏移量从 GDT 中读取对应的 8 字节段描述符。执行检查CPU 检查描述符中的权限、段界限等确认无误后才进行后续的内存访问。例如当执行mov ax, [0x1234]时如果DS寄存器指向 GDT 中的某个数据段CPU 就会依据 GDTR 定位到该段描述符从而知道这个数据段的基地址、大小和权限。与 IDTR 的对比GDTR 和另一个寄存器IDTR中断描述符表寄存器结构非常相似但用途不同寄存器指向的表用途GDTRGDT全局描述符表管理内存段分段机制IDTRIDT中断描述符表管理中断和异常处理程序它们都存储一个“基地址界限”对lgdt/sgdt与lidt/sidt指令也一一对应。重要注意事项无法直接访问GDTR 不能像通用寄存器如rax那样被指令直接读写只能通过lgdt和sgdt间接操作。特权级限制lgdt只能在最高特权级Ring 0执行这是操作系统内核的领地。普通应用程序无权修改 GDTR。系统初始化在 x86 处理器上电后GDTR 有一个默认值但操作系统在进入保护模式前必须用lgdt加载自己定义的 GDT。总而言之GDTR 是 CPU 内部的一个指针寄存器它存储了 GDT 的内存地址和大小是 x86 分段机制得以运行的基础设施。