linux-0x0C-切换CPU保护模式

为了这一步前面已经做了很多铺垫工作

现在CPU模式切换也就是2行指令的事情

1
2
3
4
5
6
7
8
   | lmsw指令只能修改cr0寄存器的低16位 cr0寄存器的第0位叫PE位 lmsw指令只能将PE从0改成1 不能从1改成0
| 通过lmsw指令对cr0寄存器PE位使能切换到保护模式
mov ax,#0x0001 | protected mode (PE) bit
lmsw ax | This is it!
| 此时cpu已经是32保护模式了 jmpi跟的0是段内逻辑偏移地址 8是CS 而此时CS中值的语义是段选择子 0x8的高14位是0x1 也就是说是到GDT中找到1号段描述符 它的段基址是0
| 要跳到的物理地址=段基址+逻辑偏移=0+0=0
| 也就要跳到0地址是 此时0地址上放着磁盘2号扇区及2号扇区之后的内容 也就是内核代码
jmpi 0,8 | jmp offset 0 of segment 8 (cs)

关于0号地址上为什么是内核代码可以再看linux-0x0D-代码的布局


linux-0x0C-切换CPU保护模式
https://bannirui.github.io/2025/05/11/Linux/linux-0x0C-切换CPU保护模式/
作者
dingrui
发布于
2025年5月11日
许可协议