如何进入保护模式?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建Servlet在线视频

这个视频flash上传及在线播放,搞了我一天了,总算有点成果,但还有一些疑问没有解决,现在发这篇随笔,为的就是交流视频在线上传和观看的一些问题。 在线编辑器使用FCKEditor,首先是修改FCKEditor的配置文件&a…

操作系统——内存管理例题

1、关于分配策略例题 case1:某系统的空闲分区见下表,如有下列作业:96KB,20KB,200KB,分别采用首次适应算法和最佳适应算法来处理这些作业序列,哪种算法能满足该作业序列请求? 分区号…

STM32中C语言知识点:初学者必看,老鸟复习(长文总结)

说在前面的话一位初学单片机的小伙伴让我推荐C语言书籍,因为C语言基础比较差,想把C语言重新学一遍,再去学单片机,我以前刚学单片机的时候也有这样子的想法。其实C语言是可以边学单片机边学的,学单片机的一些例程中&…

STM32——ADC

STM32——ADC 宗旨:技术的学习是有限的,分享的精神是无限的。 一、ADC指标 有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行 ;ADC的结果可以左对齐或右对齐方式存储在 16…

时间复杂度和空间复杂度,一看就懂,面试前必过一遍

一、定义时间和空间是程序的一个硬性指标,一个用来衡量 代码执行的速度 ,一个用来衡量 存储空间的大小程序 数据结构 算法时间复杂度:就是执行程序的快慢,速度越快,时间复杂度就越好。空间复杂度:就是执…

Oracle数据库自动存储管理(ASM)

关于ASM的讨论很多,但是到底什么是ASM?ASM是一个有效的抽象层,使你的Oracle数据库可以与叫做diskgroups的抽象空间一起使用,而不是直接使用datafiles。这带来了很多好处,但是也要求学习一些新的概念、命令、使用和管理任务。所以…

数据结构——排序【仅用于考试】

1、简介 排序&#xff0c;是重新排列表中的元素&#xff0c;使表中的元素满足按关键字有序的过程 稳定性&#xff1a;选取两个元素Ri<Rj&#xff0c;经过排序算法之后&#xff0c;仍为Ri<Rj 不稳定的排序&#xff1a;【简单选择排序&#xff0c;快速排序&#xff0c;堆…

[UWP]做个调皮的BusyIndicator

1. 前言 最近突然想要个BusyIndicator。做过WPF开发的程序员对BusyIndicator应该不陌生&#xff0c;Extended WPF Toolkit 提供了BusyIndicator的开源实现&#xff0c;Silverlight Toolkit也有一个&#xff0c;这次想要把这个控件移植到UWP中。 2. 先说点正经的 2.1 BusyIndica…

STM32——I2C

STM32——I2C 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、I2C协议 I 2 C &#xff08;Inter-Integrated Circuit&#xff09;协议是由 Philips 公司开发的&#xff0c;由于它具备引脚少、硬件实现简单、可扩展性强、不需要如 USART、CAN 的外部…

C语言发展简史

1、起源C 语言最早的原型是 ALGOL 60 1963 年&#xff0c;剑桥大学将其发展成为 CPL(Combined Programing Language)。1967 年&#xff0c;剑桥大学的 Matin Richards 对 CPL 语言进行了简化&#xff0c;产生了 BCPL 语言。1970 年&#xff0c;美国贝尔实验室(Bell Labs)的 Ken…

Oracle 系统表大全

数据字典dict总是属于Oracle用户sys的。   1、用户&#xff1a;    select username from dba_users;   改口令    alter user spgroup identified by spgtest;   2、表空间&#xff1a;    select * from dba_data_files;    select * from dba_tablespaces…

Vim 命令

Vim 命令 (建议可以看看: Practical vim 里面有很多实用的技巧, 据说已经有人翻译并出版了,英文的电子版自己网上搜索即可) 移动:(注意是移动,也就是所谓的剪切再粘贴) m 例如: 将第10至20行内容移动到50行处 进入 normal mod: 命令: : 10,20m50 Enter (注意" : ")…

STM32——EEPROM

STM32——EEPROM 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、I2C接口读写EEPROM&#xff08;AT24C02&#xff09; ——主模式&#xff0c;分别用作主发送器和主接收器。通过查询事件的方式来确保正常通信。 1、I 2C接口初始化 与其他对GPIO 复用…

Linus Torvalds谈ECC内存的重要性 痛斥英特尔正在扼杀它

新年假期&#xff0c;Linus Torvalds在邮件列表中发表的一篇火热的帖子引发技术社区关注&#xff0c;人们借此讨论ECC内存的重要性&#xff0c;Torvalds在文章中抨击了英特尔在这方面的”坏政策”&#xff0c;因为特定的市场细分使ECC内存不那么普及。Linus认为&#xff0c;纠错…

加密和解密算法的兩個實現

最近一段時間,集團加強了資安方面的管理,所有敏感的配置字節都必須經過加密處理,把最近用到的幾個加解密類整理了一下,以做備忘. 其實這兩個類實現的方法差不多,只是有些細微區別: 對稱加密演算法類 SymmetricMethodHelperusing System;using System.IO;using System.Security.…

47.leetcode36_valid_suduko

1.题目分析 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be partially filled, where empty cells are filled with the character .. A partially filled sudoku which is valid. Note: A valid Sudoku board (partia…

STM32——SPI接口

STM32——SPI接口 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、SPI协议【SerialPeripheral Interface】 串行外围设备接口&#xff0c;是一种高速全双工的通信总线。在ADC/LCD等与MCU间通信。 1、SPI信号线 SPI 包含 4 条总线&#xff0c;SPI 总…

这两种printf()函数重定向方法,太实用了

作者&#xff1a;echobright原文链接&#xff1a;https://blog.csdn.net/qq_29344757/article/details/75363639在前面学习了STM32的串口编程&#xff0c;通过USART1向计算机的串口调试助手打印数据&#xff0c;或者接收计算机串口调试助手的数据&#xff0c;接下来我们可以实现…

小时级的进度监控工具

一直在找具体到小时级别的进度监控工具&#xff0c;MS Project甘特图出现也都是天为单位&#xff0c;试用GVCGantt也不行。由于小时级别也适用于个人管理。找了些个人管理模板&#xff0c;不是很理想。直到最近接触到scrum中的burn down chart才忽然明白&#xff0c;这就是我想…

【转】oracle数据库中varchar2陷阱

转自&#xff1a;http://www.cnblogs.com/iyangyuan/p/3491215.html oracle数据库相信大家都比较熟悉&#xff0c;数据库中有一种非常常用的数据类型&#xff1a;字符串型。 对应该类型&#xff0c;在oracle中有三种比较常用的类型&#xff1a;varchar2(byte)、varchar2(char)、…