如何进入保护模式?

IA-32为操作系统及其软件的发展提供了大量的支持,它提供了4种操作模式:

 1,Real Mode,汇编书中的实模式,工作方式相当于8086。

 2,Protected Mode,保护模式,提供支持多任务环境的工作形式。

 3,Virtual 8086 Mode,虚拟8086模式,可以从保护模式切换成一种8086工作方式,可以使用户在保护模式下方便的运行一个或者多个8086源程序。

 4,System Management Mode。

 

 在IA-32中,我们需要重点学习的是Protected Mode。

 查阅资料发现稍微老一些的汇编书中,只列出1-3这3种模式及他们的工作特点。

 出于好奇和探究,对第四种模式SMM进行了了解。

 首先只有SMI才会引起进入SMM,处理器保护现场,切换到SMRAM里的一个独立地址空间执行SMM代码,RSM指令会使系统返回原来的正常模式。

 SMM相当于实模式,没有特权级和地址映射,可寻址4GB,可执行所有I/O和可用系统指令。

 当系统处于SMM时,处理器不识别后继的SMI请求,但是第一个SMI请求可以被锁存,并在系统退出SMM后被处理。

 

 内存在IA-32中被分为2个部分,Segmentation,Paging。

 Segmentation提供了一种机制可以分隔DATA,CODE,STACK以便多个程序在同一个处理器运行时不会互相妨碍。

 Paging提供了一个通常的命令页,将程序执行的虚拟内存系统映射在物理内存当中。它同样也为多任务提供隔离。

 

 GDT是Protected Mode必须的数据结构,所以进入保护模式之前必须先设定好GDT。

 设定GDT,可以采用Basic Flat Model,因为这个Model要求至少两个段描述符,一个用来引用Data segment,一个用来引用Code segment。

 除此之外,还需要定义一个系统规定的空描述符。

 设置好GDT后,需要通过LGDT指令将设定的gdt入口地址和gdt表大小装入GDTR寄存器。

 

这时需要设置A20。

 A20我感觉就是系统升级时留下的BUG,8086/8088只有20位地址线,能够表示的最大内存为1M,当需要访问100000h~10FFEFh之间的内存,必须有第21根地址线,这个就是A20。

 现在在实模式下,能访问最大的内存也只有10FFEFh,再访问更大的需要进入保护模式,进入保护模式前,需要先打开A20。现在多数PC都是通过8204键盘控制器来处理A20,但A20和8204其实没什么关系。通过汇编实现A20开启代码如下:

asm push ax  
asm in al,92h  
asm or al,00000010b  
asm out 92h,al  
asm pop ax 

 

之后开始切换到保护模式

 

asm mov  eax,cr0  
asm or  eax,1  
asm mov  cr0,eax  

 

 实质是将之前说过的PE位置1。

 理论上,这样就进入了保护模式。

 

转载于:https://www.cnblogs.com/wudibuzaijia/p/8483871.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值