Bochs源码分析 - 20: 开启保护模式

本文详细分析了如何开启x86/x64系统的保护模式,包括GDT、IDT、TSS的建立,以及CR0.PE标志位的修改。通过分析`setup.asm`汇编代码和Bochs模拟器的源码,阐述了保护模式切换的步骤,并引用Intel手册中的描述进行了验证。最后,指出了阅读Intel手册的重要性,并预告了对分页机制的进一步探索。
摘要由CSDN通过智能技术生成

前言

        在邓志老师的《x86/x64体系探索及编程》中讲述了开启保护模式的顺序,我尝试着翻阅intel手册,但很遗憾似乎自己没有找到对此的描述(应该是有的,但是自己没找到,日后找到了会补充上)。 ---> 补充:在intel卷三 9.8 9.9 对保护模式初始化有讲述,查找cr0寄存器时从手册上看到的。

        我们这篇文章来分析其如何初始化保护模式,着重来分析代码,可能不会来分析bochs源码。

开启保护模式

        在开启保护模式之前,必须建立一个完整的保护模式运行环境,下面的系统表格是必须建立的:

        ① GDT;

        ② IDT;

        ③ TSS段。

        在打开 CR0.PE 标志前,GDT必须被建立,IDT和TSS允许进入保护模式后才建立。下列环境是可选的。

        ① paging机制;

        ② LDT;

        ③ 处理器的TSS任务切换机制。

        在legacy模式的保护模式里paging可以被关闭,虚拟地址直接变为物理地址。LDT和TSS任务切换机制被用于多任务环境里。

setup.asm 汇编代码分析

        在common\setup.asm中,实现了上述过程的代码,我们现在依次来分析一下。

        首先是来加载idt段与gdt段,其调用了lidt与lgdt指令,代码如下。

        db 0x66
        lgdt [__gdt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值