保护模式其他东西

保护模式其他东西在进入保护模式之前,除了需要设置和装入GDT之外,还需要做如下一些事情:屏蔽所有可屏蔽中断;装入IDTR;中文全称:中断描述表寄存器所有协处理器被正确的复位

由于在实时模式和保护模式下的中断处理机制有一些不同,所以在进入保护模式之前,务必禁止所有可屏蔽中断,这可以通过下面两种方法之一:使用CLI指令;对8259A可编程中断控制器编程以屏蔽所有中断

即使当我们进入保护模式之后,也不能马上将中断打开,这时因为我们必须在OS Kernel中对相关的保护模式中断处理所需的数据结构正确的初始化之后,才能打开中断,否则会产生处理器异常

在实时模式下,中断处理使用IVT(Interrupt Vector Table),在保护模式下,中断处理使用IDT(Interrupt Descriptor Table),所以,我们必须在进保护模式之前设置IDTR

IDTR的格式和GDTR相同,IDTR的装入方式和GDTR也相同

由于IDT中相关的中断处理程序需要让OS Kernel来设定,所以在启动阶段,我们只需要将IDTR中IDT的基地址和Size都设为0就可以了,随后,等进入保护模式之后,由OS Kernel来真正设置它

关于中断机制和中断处理,请参考 Interrupt & Exception ,这里不再赘述

## 这是存放IDTR所需的两部分内容的位置#idt_48:.word 0 # idt limit = 0.word 0, 0 # idt base = 0L# 对于IDTR的处理,只需要这一条指令即可lidt idt_48 # load idt with 0,0## 通过设置8259A PIC,屏蔽所有可屏蔽中断#movb xFF, %al # mask all interrupts for nowoutb %al, xA1call delaymovb xFB, %al # mask all irq's but irq2 whichoutb %al, x21 # is cascaded# 保证所有的协处理都被正确的Resetxorw %ax, %axoutb %al, xf0call delayoutb %al, xf1call delay# Delay is needed after doing I/Odelay:outb %al,x80ret5. Let's Go好,一切准备就绪进入保护模式,还是进入实时模式,完全靠CR0寄存器的PE标志位来控制:如果PE=1,则CPU切换到PM,否则,则进入RM

设置CR0-PE位的方法有两种:

以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。

相关