从i386 CPU开始,英特尔处理器公开了控制寄存器,以允许内核配置处理器并指定当前正在执行的任务/进程/线程的特征。根据{{3}}(第2-13节),CR1
控制寄存器是“保留”。也就是说,内核操作控制寄存器CR1
导致未定义的行为。如文章所示,还有CR2, CR3, CR4
和CR8
控制寄存器,但它们不保留。
为什么CR1
被保留?奇怪的是,英特尔会引入一个保留的控制寄存器,然后开始添加非保留的控制寄存器,而不是简单地向{{1这样做不会导致任何向后兼容性中断(这是保留它的重点)。 Intel Systems Programming Manual推测CR1
保留了第二个可用于体系结构配置的寄存器,但正如文章所述,当引入i486时,使用了CR1
。
答案 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?有一定的历史,但实际上除非英特尔发表正式声明,否则他们没有答案。