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

相关推荐
luj_176814 小时前
R语言生态优势与学习曲线分析
c语言·开发语言·网络·经验分享·算法
叶子野格14 小时前
《C语言学习:文件操作》16
c语言·开发语言·c++·学习·visual studio
AI科技星14 小时前
万有引力G与真空介电常数ε0全维度完整关系式汇编(基于v=c螺旋时空理论)
c语言·开发语言·前端·javascript·网络·汇编·electron
C^h14 小时前
6轴达妙机械臂
c语言
叶子野格15 小时前
《C语言学习:位运算》17
c语言·开发语言·c++·学习·visual studio
社交怪人16 小时前
【最大数】信息学奥赛一本通C语言解法(题号2056)
c语言
社交怪人17 小时前
【判断正负】信息学奥赛一本通C语言解法(题号1039)
c语言
龙腾AI白云17 小时前
数字孪生:虚拟调试,真实交付
c语言·virtualenv·知识图谱
我不是懒洋洋18 小时前
手写一个异步日志库:从printf到高性能无锁日志
java·c语言·开发语言·c++·visual studio
学会去珍惜19 小时前
c语言编程 C语言入门 c语言(C语言程序设计教程 c语言视频教程 c语言零基础
c语言·开发语言