【问题标题】:Size of intel x86 Segment registers and GDT(LDT) Registerintel x86 段寄存器和 GDT(LDT) 寄存器的大小
【发布时间】:2014-02-04 07:00:22
【问题描述】:

我是系统架构的初学者,确切地说是 intel x86。 目前我正在阅读英特尔的手册(1,3a,3b,3c),我被困在分段部分。

据我所知,在保护模式下,系统正在将逻辑内存转换为线性内存(或物理内存) 并且“远指针”指向具有2个不同部分的实际线性(或物理)内存地址, 一个段选择器和一个偏移量。

我从大学学到的,每个段寄存器都有 16 位的数据, 根据英特尔的手册,16位只是段寄存器的可见部分, 但是段寄存器中有更多的隐藏部分,用户无法编程或访问。 我有可能知道段寄存器的实际大小吗?

第二个问题是关于保护模式的 LDT 、 GDT 、 IDT 寄存器。 这些寄存器(LDTr,GDTr,IDTr)是cpu芯片组中的实际寄存器吗? 如果是,是否有机会在启动序列后访问这些表(prevelige ring 3,用户模式)?

感谢您阅读我的问题。

PS。我试图谷歌它,但我找不到任何答案。 这就是我花时间写这个问题的原因。

【问题讨论】:

    标签: cpu-registers descriptor memory-segmentation


    【解决方案1】:

    x86 段寄存器都是 16 位的。我不知道任何“隐藏”的段寄存器部分。如果您无法通过 Google 搜索找到关于此的任何内容,我怀疑它是否存在。

    关于本地描述符表 (LDT)、全局描述符表 (GDT) 和中断描述符表 (IDT) 的详细说明,维基百科上有很好的说明:http://en.wikipedia.org/wiki/Intel_8086

    【讨论】:

      【解决方案2】:

      段寄存器是 16 位的。段寄存器引用的段描述符更大。令人困惑的是,所有 i386 和更高版本的处理器都有一个小的不连贯的段描述符缓存,这些缓存对应于段寄存器(每个段寄存器一个缓存的描述符),有时被称为 隐藏部分 段寄存器。尽管缓存中的每个条目都与特定的段寄存器密切相关,但它实际上并不是寄存器的一部分。缓存与段寄存器紧密相关,因为每当写入段寄存器时,都会更新相应的缓存元素(从内存中重新读取),并且使用段寄存器的指令使用与该寄存器对应的缓存描述符而不是而不是从内存中读取描述符。

      【讨论】:

      • 谢谢!你的回答非常清楚,我正是想知道的!非常感谢!
      猜你喜欢
      • 2012-02-26
      • 2019-01-02
      • 2012-02-17
      • 2023-04-01
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      相关资源
      最近更新 更多