第2章 认识CPU-2.3 32位微处理器(2)

2.3.2 保护模式

80386提供了两种工作模式。其一为实模式,在此模式下,80386可以和8086、8088完全地兼容。其二为保护模式,它是80386提供的一种全新的强的工作模式。在保护模式下,不仅可寻址4GB的内存空间,扩充了内存的分段管理机制,并可对内存进行分页管理,而且还可实现虚拟内存,支持多任务。

保护模式最重要的是完善了多任务保护机制。其实在80286开始,就具备了保护工作方式,但当时还不是很完善,80386才得到真正的完善。有两种保护模式任务方式。

(1)不同任务之间的保护:通过把每个不同的任务放在不同的虚拟地址空间中,来实现不同任务间的隔离(即A程序不能访问和修改B程序的代码和数据),以达到程序间的隔离。

(2)同一任务的保护:在每一任务之内定义了4种保护级别。分别为0、1、2、3,按环的方式来表示。

其中,0级代表最高的权限级,3级代表最低的权限级。按环的方式来表示,数字小的在"内环",数字大的在外环。其中,环0、1、2为系统级,环3为用户级。原来的系统都是基于用户和系统来设计的,所以一般的系统只使用环0和环3这两个级。

2.3.3 80386的寻址方式

80386继续采用分段的方法管理主内存。内存的逻辑地址由段基地址(段的起始地址)和段内偏移两部分表示,存储单元的地址由段基地址加上段偏移得到。段寄存器指示段基地址,各种寻址方式决定段内偏移。

实模式下,段基地址仍然是16的倍数,段的最大长度仍然是64KB。段寄存器内所含的仍然是段基地址对应的段值,存储单元的物理地址仍然是段寄存器内的段值乘上16再加上偏移。所以,尽管386有32根地址线,可直接寻址物理地址空间达到4GB字节,但在实模式下,仍然与8086/8088相似。

在保护模式下,段基地址可长32位,并且无需是16的倍数,可以是内存内任意一个开始点,段的最大长度可达4GB。它的寻址就与8086/8088有很大的变化。

  1. 描述符

保护模式下的虚拟器由大小可变的存储块组成,这样的存储块还是称"段"。每个段由如下的三个参数进行定义:基地址、段界限、段属性。在保护下可以建立多个段。

这些描述符会放置在内存的某一块空间内。

  1. 选择子

在8086/8088和80386实模式下,段寄存器用来表示段值。而在80386的保护模式下,段寄存器就成为选择子。可以将选择子看做一个句柄。

选择子的作用就是指向对应的描述符。例如,代码选择子的值是02H(也就是CS=02H),那么它指向的就是02H个描述符。

  1. 简单的寻址过程

当在机器运行如下代码时:

MOV AX,DS:DX;

假设此时DS=04H,DX=2344H,那么CPU怎样才能在内存中找DS:[DS]的值呢?其步骤如下:

(1)从DS选择子中选取04H。

(2)从对应的描述符空间中查找到第04H个描述符。

(3)取出描述符中的三个参数,分别是段基地址、段界限和段属性。假设段的基地址等于00012345H,段界限等于5678H。

(4)这时,段基地址就是段的开始位置,通过EIP的32位偏移,

就可得到物理地址,由:

物理地址=段基地址+偏移

可得物理地址就是179BDH(00012345H+5678H)。

(5)此时就可以从179BDH中取出数据放入AX寄存器中。

相关推荐
持力行10 小时前
从C struct到C++中的class
c语言·c++
2501_9142459315 小时前
C语言设计模式详解:从理论到实践的完整指南
c语言·开发语言·设计模式
2501_9142459318 小时前
C语言与硬件交互:从GPIO到中断的嵌入式编程实践
c语言·单片机·交互
炸膛坦客19 小时前
单片机/C/C++八股:(二十四)编译文件( .bin 和 .hex ,包括 .elf 和 .axf )
c语言·c++·单片机
简单电磁炮21 小时前
硬件基础4
c语言
炸膛坦客1 天前
单片机/C/C++八股:(二十三)#define 和 typedef 的区别
c语言·c++·单片机
捷瑞电子工坊1 天前
C语言取地址符 `&` 极简教程
c语言·c语言基础·取地址符·指针入门
乱七八糟的屋子1 天前
LibYAML超全教程-C语言YAML解析与生成
c语言·开发语言·配置文件·yaml解析·libyaml·开源库实战
小肝一下1 天前
2. 顺序表和链表
c语言·数据结构·c++·链表·dijkstra·依蕾娜·香香的依蕾娜
j7~1 天前
【数据结构初阶】带头双向循环链表 (DSList) --增删查改完整实现详解
c语言·数据结构·链表·带头双向循环链表