gpt4 book ai didi

operating-system - 了解IDTR寄存器?

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

我无法理解这张解释英特尔 X86-64 处理器中 IDTR 的图像。

enter image description here

IDT 基址大小是 64,我完全理解这一点,因为它可以几乎内存中的任何位置。

但是,为什么IDT限制是16位?为什么我们需要所有这些位?

每个向量的大小为 16,并且有 256 个向量,所以我需要表示的最大加法是 16*256=4096,这可以用 12 位而不是 16 位来完成。

最佳答案

首先,请记住,这种机制可以追溯到 32 位 80386,其中 lidt 将加载 32 位基数和 16 位限制。

我认为使用 16 位限制有两个原因,即使 12 位就足够了:

  1. lidt 采用与 lgdt 相同格式的基本/限制对(事实上,这两条指令记录在 the same page in Intel manuals 上)。 lgdt 确实需要 16 位的限制,因为全局描述符表可能高达 64 KB,对应于每个 8 字节的 8K 条目(同样适用于 32 位机器)。显然选择了这个数字,以便与 8086 的 16 位段寄存器相对应的 16 位选择器可以用作 GDT 的字节索引,在屏蔽掉用于在 LDT/GDT 之间进行选择的低 3 位之后并指定请求者权限级别。

    对两条指令使用相同的格式可能允许它们在它们之间共享微代码,从而略微降低 80386 的成本和复杂性。

  2. 由于最小的可寻址单位是字节,因此节省 4 位是毫无意义的,因为没有简单的方法可以将半字节用于其他用途。我想英特尔本可以说限制字段的高 4 位是保留的,并且可能会想到它们在后来的 CPU 中有其他用途(例如启用新的中断处理功能),但是,好吧,他们没有。

关于operating-system - 了解IDTR寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67586556/

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