Bìn*_*yên 6 x86 operating-system real-mode osdev bootloader
我在许多ose(和一些引导程序)中看到,它们cli在从实模式切换到保护模式之前都禁用了interrupt().为什么我们需要这样做?
BIOS使用PIT中断(IRQ0)来跟踪时间.一进入保护模式,实模式中断处理就不再有效; 处于保护模式的CPU需要保护模式IDT(中断描述符表).进入保护模式后,IDTR(IDT寄存器)中的IDT限制设置为0(任何中断号使CPU产生异常),因此只要PIT(或其他任何)产生中断,CPU就会产生异常,将产生另一个异常,触发#DF(双重故障),结果是#TF(三重故障).
此外,在保护模式下发生的IRQ0将触发#DE(除异常)ISR(中断服务程序),因为0到31的中断向量被保留用于保护模式下的异常.
因此,(最可能的,因为PIT之外的其他中断也可能发生)发生的事情的顺序是这样的(注意:这假设PIT中断将首先被触发,但是,正如我之前所说,它基本上可以是任何中断,每个都会导致#DF和三重故障):