3

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

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

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

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

感谢您阅读我的问题。

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

4

2 回答 2

3

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

对于局部描述符表(LDT)、全局描述符表(GDT)和中断描述符表(IDT)的一个很好的描述,维基百科上有一个很好的描述: http ://en.wikipedia.org/wiki/英特尔_8086

于 2014-01-15T17:10:21.410 回答
3

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

于 2014-01-15T17:48:05.317 回答