《x86汇编语言 从实模式到保护模式》学习实验笔记【09】实模式中断
目录
非屏蔽中断和可屏蔽中断
对于8086处理器来说,为了处理外部中断,两根中断信号线被引入了处理器中。这两根线的名字叫做NMI和INTR。
在实模式下,NMI被赋予了统一的中断号2。可屏蔽中断的数量则有很多,而由于INTR引脚只有一个,所以需要使用一个代理,来对这些外部中断源进行仲裁,从而决定让它们中的哪一个优先使用CPU。在个人计算机中使用的最多的就是8259芯片。由于8259芯片只有8个中断输入引脚,所以使用了两片8259进行级联以向8086提供15个中断信号。
第一片8259芯片作为主芯片接在8086的INTR引脚上,第二片8259芯片作为从芯片,接在主芯片的IR2引脚上,从而形成级联关系。
8086处理器允许256个中断,中断号的范围是0~255。上面提到的两片级联的8259芯片负责提供其中的15个,但是中断号并不固定,可以通过编程来进行设置。
如上图所示,8259的主芯片IR0引脚连接的是系统定时器/计数器芯片,从芯片的IR0引脚接的是实时时钟芯片RTC。
在8259芯片内部,有一个叫做IMR的8位寄存器,即中断屏蔽寄存器。该寄存器的8位对应着8259芯片的8个中断输入引脚。0表示允许,1表示阻断。
如果想要设置IMR寄存器的值,就需要通过端口号来访问8259芯片。对于主芯片,其端口号是0x20和0x21,从芯片的端口号是0xA0和0xA1。
除了IMR寄存器之外,在8086处理器中,还有一个标志寄存器,其IF位最终决定INTR引脚传入的外部中断能否被最终处理。IF标志位可以通过指令cli和sti来改变。cli用于清除IF标志位,sti用于置位IF标志位。