实模式和保护模式

实模式和保护模式
80x86中除了8086/8088只能在实模式下工作外,其他微处理器均可在实模式和保护模式下工作
1、实模式存储器寻址
(1)存储器地址的分段
实模式就是为8086/8088而设计的工作方式,它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法
程序员在编制程序时要把存储器划分为段,在每个段内地址空间是线性增长的。每个段的大小可达64KB,这样段内地址可以用16位表示。段不能起始于任意地址,而必须从任一小段的首地址开始。机器规定:从0地址开始,每16个字节为一小段。
在1MB的存储器里,每一个存储单元都有一个惟一的20位地址,称为该存储单元的物理地址。20位物理地址由16位段地址和16位偏移地址组成,段地址是指每一段的起始地址,由于它必须是小段的首地址,其低4位一定是0,这样,就可以规定段地址只取段起始地址的高16位值。偏移地址是指在段内相对于段起始地址的偏移值
16d*段地址+偏移地址=物理地址
(2)段寄存器
在8086~80286中,有四个专门存放段地址的寄存器,称为段寄存器。它们是代码段CS、数据段DS、堆栈段SS和附加段ES寄存器。每个段寄存器可以确定一个段的起始地址,而这些段则各有各的用途。代码段存放当前正在运行的程序,数据段存放当前运行程序所用的数据,堆栈段定义了堆栈的所在区域,附加段是一个辅助的数据区
在80386及其后继的80x86中,除上述4个段寄存器外,又增加了2个段寄存器FS和GS,它们是附加的数据段寄存器,所以8086~80286的程序允许4个存储段,而其他的80x86程序可允许6个存储段。各个段在存储器中的分配是由操作系统负责的
2、保护模式存储器寻址
    随着微机被广泛的使用,要求系统能够提供多任务处理功能,即多个应用程序同时在同一台计算机上运行,而且它们之间必须相互隔离,使一个应用程序中的缺陷或故障不会破坏系统,也不会影响其他程序的运行。为实现这样的要求,从80286起,系统就提供了保护模式存储器寻址。
在系统支持多任务功能的同时,系统也支持了虚拟存储器特性。虚拟存储器可支持程序员编写的程序具有比存储器能提供的更大的空间。这样,即使主存储器提供的空间不够大,仍能在计算机上运行占有空间要大得多的程序。实际上,程序将存放在外存储器中,程序运行时,由操作系统进行管理,把正在运行的那部分程序调入主存储器。而保护模式寻址则对虚拟存储特性提供了很好的支持
Intel选择了在段寄存器的基础上构筑保护模式的构思,并且保留段寄存器为16位,但是却又增加了两个段寄存器FS 和GS。为了实现保护模式,光是用段寄存器来确定一个基地址是不够的,至少还得有一个地址段的长度,并且还需要一些其他的信息,如访问权限之类。所以,这里需要的是一个数据结构,而并非一个单纯的基地址。Intel设计人员的基本思路是:在保护模式下改变段寄存器的功能,使其从一个单纯的基地址变成指向这样一个数据结构的指针。这样,当一条访存指令发出一个内存地址时,CPU就可以这样来归纳出实际上应该放上数据总线的地址:
根据指令的性质来确定应该使用哪一个段寄存器,例如转移指令中的地址在代码段,而区属指令中的地址在数据段。这点与实地址模式相同
根据段寄存器的内容,找到相应的地址段描述结构
从地址段描述结构中得到基地址
将指令中发出的地址作为位移,与段描述结构中规定的段长度相比,看看是否越界
根据指令的性质和段描述符中的访问权限来确定是否越权
将指令中发出的地址作为位移,与基地址相加而得到实际的物理地址
虽然段描述结构存储在内存中,在实际使用时却将其装载入CPU中的一组“影子”结构,而CPU在运行时则使用其在CPU中的“影子”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值