微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

了解IDTR寄存器?

如何解决了解IDTR寄存器?

我无法理解这张解释英特尔 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 格式相同的 base/limit 对(实际上,这两条指令记录在 the same page in Intel manuals 中)。而 lgdt 确实需要一个 16 位的限制,因为全局描述符表可能高达 64 KB,对应于每个 8 字节的 8K 条目(同样适用于 32 位机器)。清楚地选择了这个数字,以便对应于 8086 的 16 位段寄存器的 16 位选择器可以用作 GDT 的字节索引,在屏蔽掉用于在 LDT/GDT 之间进行选择的低 3 位之后并指定请求者权限级别。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。