intel x86段寄存器和GDT(LDT)寄存器的大小

时间:2014-01-15 17:03:21

标签: cpu-registers descriptor memory-segmentation

我是系统架构中的初级学生,准确地说是intel x86。 目前我正在阅读英特尔的手册(1,3a,3b,3c),而且我一直处于细分部分。

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

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

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

感谢您阅读我的问题。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

为了更好地描述本地描述符表(LDT),全局描述符表(GDT)和中断描述符表(IDT),维基百科上有一个很好的描述:http://en.wikipedia.org/wiki/Intel_8086