第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寄存器中。

相关推荐
Navigator_Z9 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
himobrinehacken9 小时前
取模运算的汇编奥秘揭秘
c语言·安全
青岚_Nox12 小时前
C语言实战:带你手写一个带"计时功能"的猜数字小游戏
c语言
iotxiaohu14 小时前
用 cflow 查看 C 函数调用关系
c语言·开发语言·cflow
iCxhust16 小时前
51单片机电力载波应用开发(九)51产品化
c语言·数据库·嵌入式硬件·mysql·51单片机·软件工程·c51
Logic10117 小时前
C语言/数据结构字符串题解:统计“chhc“子串权值总和——一次遍历模式匹配
c语言·数据结构·算法·字符串·时间复杂度·空间复杂度·ascii
m0_5474866618 小时前
《数据结构 (C语言)》期末试卷及答案(10套)2026版
c语言·开发语言·数据结构
八月的雨季 最後的冰吻18 小时前
FFmepg-- 42-ffplay.c 线程安全机制深度分析
c语言·安全·ffmpeg
逐光者93319 小时前
滤波器的 R 与 C 如何选择:从截止频率到工程实践
c语言·开发语言·r语言
水饺编程19 小时前
第2章:Linux 基础,whoami 命令
linux·c语言·汇编