为什么Intel选择在段描述符中将段的基和限制分割成不同的部分,而不是使用连续位呢?
参见01.htm的图5-3。
为什么他们不将基地址存储在位0到31,限制在位32到51,并使用其他位的剩余位置(或一些类似的布局)?
发布于 2016-04-19 21:10:03
Raymond Chen已经在评论中回答了这个问题:
为了与80286兼容。80286的最大区段大小为2^16,最大基数为2^24。因此,基场和极限场为16位和24位宽。当尺寸和底座扩大到32位时,它们必须放在其他地方,因为好的地方已经被占据了。
下面是来自Intel 80286程序员参考手册的段描述符(代码或数据类型)的扫描:
作为比较,下面是Intel 64和IA-32架构软件开发人员手册(第3A卷)的截图:
格式完全相同,但保留位的使用除外。基座从24位扩展到32位,段限从16位扩展到20位,并增加了一些额外的标志。(“访问”位作为第二个屏幕截图中“类型”字段的一部分)
因此,简而言之:布局很奇怪,因为它是为16位处理器设计的旧布局的向后兼容扩展。
https://stackoverflow.com/questions/30253678
复制相似问题