前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何开启保护模式

如何开启保护模式

作者头像
shysh95
发布2021-07-16 10:36:05
1K0
发布2021-07-16 10:36:05
举报
文章被收录于专栏:shysh95

摘要

  1. 如何进入保护模式
  2. A20地址线
  3. CR0寄存器

如何进入保护模式

进入保护模式大约需要三个步骤:

  1. 加载全局描述符表
  2. 打开A20地址线
  3. 修改CR0寄存器

这三个步骤可以不连续,不固定顺序。

点击此处全局描述符表深入学习全局描述符表。

A20地址线

实模式下的内存访问形式是段基址左移16位+段内偏移地址,实模式下的寄存器是16位,也就是说CPU最大可以放到的地址是0xFFFF0+0xFFFF,即0x10FFEF。

8086/8088CPU地址总线只有20位,实模式下的地址总线是20位,也就是说最大寻址空间是1MB,即0x00000~0xFFFFF,超出1M的内存空间在逻辑上是正常的,但在物理内存中却无法访问,超过1MB的内存区域被称为高端内存区HMA。

所以当程序员给出超过1M的地址时,系统并不认为其访问越界而产生异常,而是自动从重新0开始计算,也就是说系统计算实际地址的时候是按照对1M求模的方式进行的,这种技术被称为wrap-around。

在Intel 80286处理器中,系统的地址总线发展为24根,这样能够访问的内存可以达到16M。

在实模式下,80286以及后续系列都应该和8086/8088完全兼容。

但是实模式下80286芯片却存在一个BUG:如果程序员访问0x100000~Ox10FFEF之间的内存,系统将实际访问这块内存,而不是像过去一样重新从0开始。

为了解决上述问题,IBM使用8042键盘控制器上剩余的一些输出线来管理第21根地址线(从0开始数是第20根),所以被称为A20Gate。

  • 如果A20Gate被打开,那么访问0x100000~0x10FFEF之间的地址时,CPU将会访问物理内存
  • 如果A20Gatew被禁止,访问0x100000~0x10FFEF之间的地址时,CPU会自动回绕

FAST A20在许多新型PC上存在着一种通过芯片来直接控制A20Gate的BIOS功能。从性能上,这种方法比通过键盘控制器来控制A20Gate要稍微高一点。

由于保护模式下我们的寻址空间将不再受到实模式下1M的限制,因此我们在进入保护模式时也需要通过打开A20,让CPU可以访问到真实的物理内存。

打开A20地址总线的方式是将端口0x92的第一位置1,如下:

代码语言:javascript
复制
in al, 0x92
or al, 0000_0010b
out 0x92, al

CR0寄存器

控制寄存器CRO是CPU的窗口,既可以用来展示CPU的内部状态,也可以用于控制CPU的运行机制。在CRO寄存器的第0位(PE位),此位用来启用保护模式,只需要将该位置1,CPU就会真正进入保护模式。

代码语言:javascript
复制
mov eax, cr0
or eax, 0x00000001
mov cr0, eax
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员修炼笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档