如何选择CMOS寄存器?

Adr*_*ang 2 c interrupt

我正在研究单片内核,并试图实现对CMOS时钟的支持.在阅读了这个主题后,我遇到了这行代码:

outb (0x70, (NMI_disable_bit << 7) | (selected CMOS register number));
Run Code Online (Sandbox Code Playgroud)

我主要了解除了NMI_disable_bit部分之外发生了什么.这个片段的含义是什么?有人可以向我解释一下吗?

Mar*_*oom 6

当设置为1时,使用端口0x70的第7位,RTC RAM索引寄存器来禁用所有NMI源.

NMI是一个中断,不能被R/E/FLAGS寄存器中的IF中断标志屏蔽(例如,使用该cli指令),因此需要硬件辅助来禁用它.
端口0x70的第7位被否定,并与所有NMI源(或等效设计)进行AND运算.

请注意,自Pentium Pro以来,NMI引脚已被LINT1引脚取代.
LAPIC被禁用时,LINT1引脚恢复为NMI引脚,但如果LAPIC被使能,则术语NMI是本地中断1的同义词,软件可以编程每个LINT0/1引脚以触发各种事件(包括但不是限制为,NMI).