gpt4 book ai didi

assembly - 什么是描述符寄存器?

转载 作者:行者123 更新时间:2023-12-03 06:34:04 25 4
gpt4 key购买 nike

我知道什么是段寄存器。它们保存段选择器(描述符表中的索引+特权级别+本地或全局表),显然还有一个隐藏部分,也称为“描述符缓存”。我还了解什么是全局描述符表和局部描述符表,当然还有描述符本身。然而,intel 64 and IA-32 architectures software developers manual在第 3A 卷第 95 页提到描述符寄存器(第 3.4.4 章:IA-32e 模式下的段加载指令),这是我第一次听说它们。

The processor checks that all linear-address references are in canonical form instead of performing limit checks. Mode switching does not change the contents of the segment registers or the associated descriptor registers. These registers are also not changed during 64-bit mode execution, unless explicit segment loads are performed.

你们谁能解释一下描述符寄存器是什么?SS、ES、DS、CS、Es、FS 和 GS 是段寄存器,全局描述符表和局部描述符表中的每个条目称为描述符。那么什么是描述符寄存器呢?

我对 Google 进行了一些研究,但似乎没有任何内容可以回答我的问题。

最佳答案

描述符寄存器通常称为描述符缓存。每次在内存操作数中使用段寄存器时,不是从内存中的全局或局部描述符表 (GDT/LDT) 中读取适当的描述符,而是仅在加载段寄存器时从 GDT/LDT 中读取描述符。 (请注意,所有内存操作数都使用段寄存器,无论是隐式还是显式,因此如果不以这种方式工作,CPU 将会慢得多。)

这样做的副作用是描述符缓存可能与段寄存器中加载的当前选择器值不同步。例如,如果使用 LGDT 指令更改 GDT 的地址,则描述符缓存不会更新,并且仍包含旧 GDT 中的描述符值。

切换模式时也会发生同样的情况,例如从实模式到保护模式,或从保护模式到长模式(Intel 称之为 IA-32e 模式)。从实模式切换到保护模式后,描述符缓存仍然具有旧的实模式基础、限制和访问权限。这很重要,因为段寄存器还包含其实模式值,这些值在保护模式下不太可能有效。特别是,即使 CS 包含无效选择器,它也允许获取 CS:EIP 处的下一条指令。 CS 描述符缓存仍然包含指向模式更改之前相同位置的有效值。

从保护模式到长模式的转换工作方式类似,只是描述符缓存中的大多数值在长模式下被忽略。相反,除 FS 和 GS 之外的所有段都使用固定基数 0,并且不执行限制检查。这意味着切换到长模式的代码应该使用基数为 0 的代码段,这样有效的 CS 基数就不会改变。

关于assembly - 什么是描述符寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52505313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com