Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
X86 如何读取和写入IMCR寄存器?_X86_Kernel_Interrupt_Osdev_Apic - Fatal编程技术网

X86 如何读取和写入IMCR寄存器?

X86 如何读取和写入IMCR寄存器?,x86,kernel,interrupt,osdev,apic,X86,Kernel,Interrupt,Osdev,Apic,我目前正在编程一个x86-64内核,需要将APIC模式设置为对称I/O模式。Intel在第31页的多处理器规范中指出,要启用此模式,必须将01H写入IMCR寄存器。问题在于该寄存器(必须通过outb/inb访问)似乎没有记录。我怎样才能读写IMCR?正如@MichaelPetch在pdf第28页的评论中指出的,IMCR登记册是在pdf第28页定义的,不知何故我错过了它。引述: IMCR由两个读/写或仅写I/O端口(22h和23h)支持,分别接收地址和数据。要访问IMCR,将值70h写入I/O端口

我目前正在编程一个x86-64内核,需要将APIC模式设置为对称I/O模式。Intel在第31页的多处理器规范中指出,要启用此模式,必须将01H写入IMCR寄存器。问题在于该寄存器(必须通过outb/inb访问)似乎没有记录。我怎样才能读写IMCR?

正如@MichaelPetch在pdf第28页的评论中指出的,IMCR登记册是在pdf第28页定义的,不知何故我错过了它。引述:

IMCR由两个读/写或仅写I/O端口(22h和23h)支持,分别接收地址和数据。要访问IMCR,将值70h写入I/O端口22h,该端口选择IMCR。然后将数据写入I/O端口23h。开机默认值为零,这将NMI和8259 INTR线路直接连接到BSP。写入01h值将迫使THNMI和8259 INTR信号通过APIC

然而

如果未实施PIC模式,IMCR是可选的。MP featureinformation字节的IMCRP位(请参阅第4章)使操作系统能够检测IMCR是否已实现


MP浮点表已弃用,因此应避免检查这些表中的标志。相反,请解析ACPI MADT表并检查PIC标志位是否设置在该表中

希望您已经查看了多处理器规范第3-8页,其中包含您可能感兴趣的信息。@MichaelPetch-Hmm我看不到IMCR寄存器在该规范中的记录位置。感谢您提供的操作说明,但是我真的很想看看它的规范:/关于端口0x22和0x23以及IMCR的部分在规范的第3-8页,这与我上面所说的差不多。根据第3-8页的规范:IMCR由两个读/写或仅写I/O端口(22h和23h)支持,分别接收地址和数据。要访问IMCR,请将值70h写入I/O端口22h,以选择IMCR。然后将数据写入I/O端口23h。开机默认值为零,将NMI和8259 INTR线路直接连接到BSP。写一个01h的值迫使NMI和8259 INTR信号通过APIC。哦,我的天哪,我怎么会错过这个xD谢谢!