x86段描述符布局-为什么奇怪?

x86段描述符布局-为什么奇怪?,x86,cpu-architecture,memory-segmentation,X86,Cpu Architecture,Memory Segmentation,为什么Intel选择在段描述符中将段的基和限制拆分为不同的部分,而不是使用连续位 见图5-3 为什么他们不将基址存储在0位到31位,限制在32位到51位,并将剩余位置用于其他位(或类似布局)?已经在评论中回答了这个问题: 与80286兼容。80286的最大段大小为2^16,最大基数为2^24。因此,基域和极限域分别为16位和24位宽。当大小和基址扩展到32位时,它们必须放在其他地方,因为好的位置已经被占用了 以下是对《英特尔80286程序员参考手册》中的段描述符(代码或数据类型)的扫描: 为便

为什么Intel选择在段描述符中将段的基和限制拆分为不同的部分,而不是使用连续位

见图5-3

为什么他们不将基址存储在0位到31位,限制在32位到51位,并将剩余位置用于其他位(或类似布局)?

已经在评论中回答了这个问题:


与80286兼容。80286的最大段大小为2^16,最大基数为2^24。因此,基域和极限域分别为16位和24位宽。当大小和基址扩展到32位时,它们必须放在其他地方,因为好的位置已经被占用了

以下是对《英特尔80286程序员参考手册》中的段描述符(代码或数据类型)的扫描:

为便于比较,以下是《英特尔64和IA-32体系结构软件开发人员手册》(第3A卷)中的屏幕截图:

格式完全相同,只是为了使用保留位。基址从24位扩展到32位,段限制从16位扩展到20位,并添加了一些附加标志。(第二个屏幕截图中的“已访问”位包含在“类型”字段中)


因此,简而言之:这种布局很奇怪,因为它是为16位处理器设计的旧布局向后兼容的扩展。

与80286兼容。80286的最大段大小为2^16,最大基数为2^24。因此,基域和极限域分别为16位和24位宽。当大小和基数扩展到32位时,它们必须放在其他地方,因为好的位置已经被占据了。试图理解英特尔,只会让你发疯。