实模式->保护模式

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

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

3. 使能 A20 地址线

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,591评论 8 114
  • 这个程序的核心目的是:试验大地址的读写,在保护模式下面寻址空间可达4GB,实模式下只能寻址1MB。(why:为什么...
    王侦阅读 4,314评论 0 0
  • ``本文的一些截图来自于 和<x86汇编从实模式到保护模式>` 最近复习一些操作系统的知识,首先遇到了个坑便是计算...
    Quasars阅读 5,282评论 2 6
  • 可以将一个单独的任务所用到的所有东西都封装在一个LDT中。 step1.增加一个32位的代码段:LABEL_COD...
    王侦阅读 4,874评论 0 0
  • 核心目的:实现由实模式到保护模式的转换 核心步骤: 1)程序定义了GDT数据结构 2)16位代码进行了一些...
    王侦阅读 4,842评论 0 0