首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >懂IDTR寄存器吗?

懂IDTR寄存器吗?
EN

Stack Overflow用户
提问于 2021-05-18 12:50:54
回答 1查看 705关注 0票数 3

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

IDT基本入口大小为64,我完全理解,因为它可以是,几乎是内存中的任何地方的

但是,为什么IDT限制是16位呢?为什么我们需要这些小东西?

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

EN

回答 1

Stack Overflow用户

发布于 2021-05-18 14:56:14

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

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

  1. lidt采用与lgdt相同格式的基/限制对(实际上,这两条指令都记录在英特尔手册中的同一页上)。lgdt确实需要一个16位的限制,因为全局描述符表最多可以是64 K字节,对应8K条目,每个条目8字节(同样适用于32位计算机)。这个数字的选择是明确的,这样一个16位的选择器,对应于8086的16位段寄存器,可以被用作GDT的字节索引,在屏蔽了它的低3位后,用于在LDT/GDT之间进行选择并指定请求者特权级别。 对这两种指令使用相同的格式可能会允许它们之间共享微码,从而稍微降低了80386的成本和复杂性。
  2. 因为最小的可寻址单位是字节,所以保存4位是毫无意义的,因为在其他事情上使用半字节是不容易的。我想英特尔可能会说,限制字段的高4位是保留的,并且可能会在以后的CPU中为它们考虑其他用途(例如启用新的中断处理功能),但是,它们没有。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67586556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档