了解IDTR寄存器吗?

3

我无法理解这张图解释了Intel X86-64处理器中IDTR的含义。

enter image description here

IDT基地址的大小为64,我完全明白这一点,因为它可以几乎出现在内存的任何位置。

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

每个向量的大小为16,并且有256个向量,因此我需要表示的最大加法是16*256 = 4096,可以用12位而不是16位进行表示。

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
2
首先,请记住这个机制可以追溯到32位的80386,其中lidt会加载一个32位的基地址和16位的限制值。 我认为使用16位限制有两个原因,即使12位就足够了: 1. lidt采用与lgdt相同格式的基地址/限制对(实际上这两个指令在Intel手册的同一页上有详细说明)。而lgdt确实需要16位限制,因为全局描述符表可以高达64 Kbytes,相当于8K个每个8字节的条目(同样适用于32位机器)。这个数字显然是选择使用16位选择器,对应于8086的16位段寄存器,作为GDT的字节索引,同时屏蔽掉其低3位,这些位用于在LDT / GDT之间选择并指定请求者特权级别。 使用相同的格式来处理这两个指令可能允许它们共享微码,稍微降低了80386的成本和复杂性。 2. 由于最小的可寻址单元是字节,因此保存4位是相当无意义的,因为没有简单的方法将半个字节用于其他用途。我想Intel可以说限制字段的高4位是保留的,并且可能在以后的CPU中考虑了一些其他用途(例如启用新的中断处理功能),但是,他们没有这样做。

它早于386,因为IDT和GDT/LDT起源于286。在286上,GDTR/LDTR/IDTR是6字节结构。2个字节用于限制,4个字节用于基地址(其中仅使用基地址的低24位,而且高8位被丢弃)。 - Michael Petch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,