80x86的3种工作方式
80x86中的32位CPU全面支持32位的数据、指令和寻址方式,提供了3种工作方式:是地址方式、保护方式和保护方式下的虚拟8086方式。在计算机上电或复位后,32位CPU首先初始化为是地址方式,再通过是地址方式进入32位保护工作方式。保护方式是32位CPU固有的工作方式,只有在该方式下CPU才能发挥其全部功能。在保护方式下,可通过设置控制标志使CPU转入虚拟8086工作方式。
实地址方式
实地址方式是为了与16位的8086兼容而保留的工作方式。在此方式下,可以使用32位寄存器和32位操作数,也可以采用32位的寻址方式。32位CPU与16位CPU一样,只能寻址1MB物理存储空间,程序段的大小不超过64KB,段基址和偏移地址都是16位的,这样的段也称为“16位段”。
保护方式
在保护方式下,使用32位地址线,寻址4GB的物理存储空间,虚拟存储空间可达64TB。段基址和段内偏移量都是32位的,程序段的大小可达4GB,这样的段也称为“”32位段。该方式提供了支持多任务的硬件机构,能位每个任务提供一台虚拟处理器来仿真多台处理器,此时,操作系统将CPU轮流分配给每一个虚拟处理器运行该空间中的任务,并在各种任务之间来回快速而方便地切换。分段和分页的存储管理功能能对各个任务分配不同的虚拟存储空间,实施执行环境的隔离和保护,对不同的段设立特权级并进行访问权限检查,以防不同的用户程序之间、用户程序与系统程序之间的非法访问和干扰破坏,使操作系统和个应用程序都收到保护。这也是将该工作方式称为保护方式的原因。
虚拟8086方式(V86方式)
此方式是一种在保护方式下运行的类似实方式的工作环境,因此,能充分利用保护方式提供的多任务硬件机构、强大的存储管理和保护能力。例如,多个8086程序可以通过分页存储管理机制,将各自的1MB地址空间映射到4GB物理地址的不同位置,从而共存于主存且并行运行,没个程序就像在自己的8086中单独运行一样。CPU不但可以执行多个虚拟8086任务,还可以将虚拟8086任务与其他32位CPU任务一起执行。
综上:对于80x86中32位CPU,在实方式下执行的是16位段的程序(寄存器和数据可以是32/16位);在保护方式下可以对32位段和16位段的程序单独或混合操作;虚拟8086方式可并行执行多个8086的16位段程序,但由于它与实方式的特权级不同,因此,它还不能代替实方式
一个计算机系统的存储系统由主存和辅助存储器组成。通常所称的软盘、硬盘、U盘、光盘、磁带是外存储器,属于计算机的外部设备,用来存放当前不参加运行的程序和数据,在需要时可与主存成批地交换信息。其特点是存储容量大但存取速度低,价格便宜。主存设在主机内部,用来存放当前运行的程序和所需的数据,以便随时向CPU高速地提供信息。相对外存储器而言,主存容量较小,成本高,但存取速度快。主存的基本存储单位是位,它能容纳一个二进制数的0或1.
为了区别这些不同的(或字或双字)存储单元,每一单元都被指定一个编号,称为此单元的物理地址(简称PA)。80X86机的主存是按8位字节编址的,即以字节作为最小寻址单位。假设主存容量为2MB,则它的最低地址为0,最高地址为01FFFFFH
堆栈是在主存中开辟的一片数据存储区,从硬件观点看,堆栈必须由一片存储单元和一个指示器组成。固定端叫栈底。栈指针用来指示栈元素进栈和出栈时偏移地址的变化,指针所指示的最后存入数据的单元叫栈顶,所有信息的存取都在栈顶进行,因而栈指针总是指向栈顶的。
80X86允许用户建立自己的字或双字堆栈,其存储区位置由堆栈段寄存器SS给定,并固定采用SP或ESP做指针,即SP或ESP的内容为栈顶相对于SS的偏移地址。空栈时,SP/ESP指向堆栈段的最高地址即栈底,存入时栈顶均由高地址向低地址变化。
物理地址的形成
在80X86系列机中,最低档CPU是8086,它只有20根地址线,直接寻址能力为2的20次方B,主存容量可达1MB,物理地址编号从0~0FFFFFH。这样一来,CPU与存储器交换信息必须使用20位的物理地址。但是,8086内部却是16位结构,它里面与地址有关的寄存器全部都是16位的,例如,SP、BP、SI、DI、IP等。因此,它只能进行16位地址运算,表示16位地址,寻找操作数的范围最多也只能是64KB。位了能表示20位物理地址,8086的设计人员提出了将主存分段使用的方案:将1MB的存储器按64KB分段,设置4个段寄存器CS、DS、SS、ES,保存当前可使用段的段首址。如果使各段的段首址都从能被16除的地址开始,那么,这些段首址的最低4位总是0,;若暂时忽略这些0,则段首址的高16位正好装入一个段寄存器中。访问存储单元时,CPU可以根据操作的性质和要求,选择某一适当的段寄存器,将它里面的内容左移4位,即在最低位后面补入了4个0,恢复了段首址原来的值,再与本段中某一待访问存储单元的偏移地址相加,则得到该单元的20位物理地址。这样一来,寻找操作数的范围就可达到1MB。由此可看出,段中某一存储单元的地址是用两部分来表示的,即“段首地址:偏移地址”,称为二维的逻辑地址。主存的分段使用技术可以让系统很方便地将程序中的代码段、数据段、堆栈段经重定位后,分开放在不同的存储区域里。
随着80X86系列机的发展,特别是32位CPU的推出,它已能全面支持32位的数据、指令和寻址方式,可访问4GB的存储空间。但为了与低档的8086兼容,一直保留了主存的分段使用技术,段寄存器也由4个增加至6个并提供了实方式。
实方式物理地址的形成
在实方式下,32位CPU与8086一样,只能寻址1MB物理存储空间并采用分段使用的方式,每段的大小不超过64KB,段首地址和段内偏移地址都用16位表示。这样,1MB的存储空间最少可分16个段,这6个段为:代码段、堆栈段、数据段和3个附加数据段。这些当前能被CPU访问段的首地址由分段部件中的6个专用段寄存器来给出。
CS:给出当前代码段首地址(取指令指针为IP)
SS:给出当前堆栈段首地址(堆栈指针为SP)。
DS;给出当前数据段首地址。
ES、FS、GS:给出当前附加数据段首地址。
其中,代码段是程序代码的存储区,指令指示器IP总是保存着下一条将要取出指令相对于CS的偏移地址。在代码段中取指令时,指令物理地址:PA=(CS)左移4位+(IP)
堆栈段是程序的临时数据存储区,存放暂时不用的数据。在用户程序中,一般都需要用户自己建立堆栈段,特别是在作子程序调用、系统功能调用等操作时,堆栈段更是必不可少的。用户一旦定义好堆栈段,系统就将自动以SP为指针。做堆栈操作时,栈顶物理地址PA=(SS)左移4位+(SP)
数据段和附加数据段是程序中使用的数据存储区。在一般情况下,程序中不需要定义附加数据段,如果必须定义附加数据段,则在数据量不是太大时,最简单方法是让附加数据段和数据段重合,即将他们设置成一个段。当需要在数据段中读/写数据时,数据的物理地址PA=(DS
或ES、FS、GS)+16位偏移地址
其中,数据的偏移地址由寻址方式确定。
在汇编源程序中,用户必须将数据段首址置入DS或ES、FS和GS中,而CS,SS由系统自动置入
80x86的3种工作方式的更多相关文章
- LVS三种工作方式八种算法
一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...
- LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法)
一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一 台计算机.集群系统中的单个计 ...
- LVS原理详解(3种工作方式8种调度算法)--老男孩
一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...
- LVS原理详解(3种工作方式8种调度算法)
一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...
- Git教程(8)Git几种工作方式
1,集中共享式(1个仓库) 其中角色: 1个远程仓库,N个开发者. 工作方式: 集中式系统:所有开发者共享同一个远程仓库.每次推送数据到远程仓库时都要先更新一下. 利用 Git 的分支模型,通过同时在 ...
- Apache下PHP的几种工作方式
PHP在Apache中一共有三种工作方式:CGI模式.Apache模块DLL.FastCGI模式. 一.CGI模式 PHP 在 Apache 2中的 CGI模式.编辑Apache 配置文件httpd. ...
- EF框架的三种工作方式
EF框架step by step(1)—Database-First EF框架step by step(2)—Model-First EF框架step by step(3)—Code-First 通过 ...
- RabbitMQ的五种工作方式详细
在了解之前得先有个RabbitMQ客户端.官网: https://www.rabbitmq.com/getstarted.html connections:无论生产者还是消费者,都需要与RabbitM ...
- SPI总线的特点、工作方式及常见错误解答
1.SPI总线简介 SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口.它用于CPU与各种外围器件进行全双工.同步串 ...
随机推荐
- static 控件颜色修改
在对话框上放一个StaticText控件后如果文字长度不能铺满控件的 rect,如下: 那么运行时会出现如下效果 通过MSG_WM_CTLCOLORSTATIC消息修改static控件背景色模式为透明 ...
- ubuntu下安装UltraEdit
在windows下常年使用UltraEdit来查看log,现在突然切换到ubuntu下,系统自带的Text Editor相当不适应:只有自己安装了. 首先,需要下载安装包,可以去:http://www ...
- GRPC: set up..
get the grpc source file.. git clone https://github.com/grpc/grpc git submodule update --init --recu ...
- 二、oracle sql*plus常用命令
一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...
- 数组实现UITabview的cell设置
- POJ 3416 Crossing
树状数组+离线操作 #include<stdio.h> #include<string.h> #include<math.h> #include<algori ...
- 辨别 ShopEX Ecshop
御剑可以识别ShopEX 或者 Ecshop 特征 ShopEX : 蓝色的icon js里有很多Cookie. <link rel="stylesheet" href=&q ...
- PureMVC 框架总结收录
PureMVC框架的目标很明确,就是把程序分为低耦合的三层:Model.View和Controller. 通过使用PureMVC后,我们的代码将集中分为以下几个部分:Façade.Command.Me ...
- jni中的参数含义
#include <jni.h> JNIEXPORT jstring JNICALL Java_com_example_hellojni_MainActivity_helloFromC ( ...
- 四维dp 或者 剪枝 + dfs Codeforces Beta Round #6 (Div. 2 Only) D
http://codeforces.com/contest/6/problem/D 题目大意:有一队人,排成一列,每个人都有生命值,你每次可以攻击2~n位置的一个的人,假设每次攻击的位置为pos,那么 ...