实模式->保护模式

1. 关中断,并清除方向标志,即将 DF 置“0”,这样(E)SI 及(E)DI 的修改为增量。

2. 清零各数据段寄存器:DS、ES、FS

3. 使能 A20 地址线

实模式->保护模式_第1张图片
get from ucore

4. 建立全局描述符表

lgdt gdtdesc

movl %cr0, %eax

orl $CR0_PE_ON, %eax

movl %eax, %cr0

5.通 过 长 跳 转 指 令 进 入 保 护 模 式 。

ljmp $PROT_MODE_CSEG, $protcseg


6. 执行完上面的这条汇编语句后,bootloader 让 80386 从实模式进入了保护模式。由于在访问数据或栈时需要用 DS/ES/FS/GS 和 SS 段寄存器作为全局描述符表的下标来找到相应的段描述符,所以还需要对 DS/ES/FS/GS 和 SS 段寄存器进行初始化,使它们都指向位于0x10 处的段描述符(即 gdt 中的数据段描述符)。

# Set up the protected-mode data segment registers

movw $PROT_MODE_DSEG, %ax                      # Our data segment selector

movw %ax, %ds                                  # -> DS: Data Segment

movw %ax, %es                                  # -> ES: Extra Segment

movw %ax, %fs                                  # -> FS

movw %ax, %gs                                  # -> GS

movw %ax, %ss                                  # -> SS: Stack Segment

你可能感兴趣的:(实模式->保护模式)