第三章 保护模式
非常困难、内容非常多的一章。这一章的学习流程大致:
1.从实模式到保护模式的跳转。熟悉保护模式下寻址流程。GDT的实现,段选择子的实现,熟悉GDT中段描述符的格式,尤其是属性一项。
2.在GDT中,添加一个LDT。
3.从保护模式如何跳转回实模式?
4.CPL,RPL,DPL的关系,深入理解“保护”二字的意义
5.从0优先级,跳转到3优先级,体会“门”、TSS的详细意义
6.开启分页机制,熟悉页目录表基址寄存器cr3,以及页目录表-PDE,页表-PTE,以及32位CPU为什么最大寻址4GB。
下面就每一点说说自己的学习体会:
1.从实模式到保护模式的跳转,熟悉保护模式下寻址流程。GDT的实现,段选择子的实现。
这在上一篇博客中详细说明了。
要弄清楚跳转,就要弄清实模式和保护模式下的区别。
1.实模式下,用CS:IP的方式获得指令地址,然后取指,执行。保护模式下,CS中存放的是“代码段段选择子”,IP继续存放偏移量。所以跳转时一定要把CS里放进“代码段段选择子”。怎么放呢?
使用 jmp dowrd 代码段段选择子:00000000,就可以更改CS中的内容了。
2.可是,CPU怎么知道jmp语句执行时,是保护模式还是实模式?更改32位的cr0寄存器(0号控制寄存器),因此,jmp之前,一定要这样做:
MOV EAX, CR0
OR EAX,1
MOV CR0,EAX
当CR0的最低位为0——CPU在实模式下工作
当CR0的最低位为1——CPU在保护模式下工作
3.在Jmp 段选择子:0这句话之前,应该先把段选择子和对应的段描述符的内容填好。怎么填?看了这段代码,你会一目了然:

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



