为什么保留x86 CR1控制寄存器?

时间:2017-07-24 00:03:37

标签: x86 intel cpu-architecture

从i386 CPU开始,英特尔处理器公开了控制寄存器,以允许内核配置处理器并指定当前正在执行的任务/进程/线程的特征。根据{{​​3}}(第2-13节),CR1控制寄存器是“保留”。也就是说,内核操作控制寄存器CR1导致未定义的行为。如文章所示,还有CR2, CR3, CR4CR8控制寄存器,但它们保留。

为什么CR1被保留?奇怪的是,英特尔会引入一个保留的控制寄存器,然后开始添加非保留的控制寄存器,而不是简单地向{{1这样做不会导致任何向后兼容性中断(这是保留它的重点)。 Intel Systems Programming Manual推测CR1保留了第二个可用于体系结构配置的寄存器,但正如文章所述,当引入i486时,使用了CR1

1 个答案:

答案 0 :(得分:2)

Intel® 64 and IA-32 Architectures Software Developer’s Manual CR1-保留。因此CR1未使用,保留给Intel + AMD供以后使用。由于已保留,因此访问CR1会引发异常:

尝试引用CR1,CR5,CR6,CR7和CR9–CR15会导致 未定义的操作码(#UD)异常。

为什么有人在使用CR2时就没有使用CR1呢? X86是不规则的,实际上,英特尔什么也没说。本文 Why is there no CR1 – and why are control registers such a mess anyway?有一定的历史,但实际上除非英特尔发表正式声明,否则他们没有答案。