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由系统自动置入

时间: 2024-07-31 00:20:19

80x86的3种工作方式的相关文章

LVS三种工作方式八种算法

一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集群计算机通常用来改进单个计算机的计算速度和/或可靠性.一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多. 集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务 LVS在企业架构中的位置: 以上的

PHP在apache中的三种工作方式

cgi是什么? CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程.CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体. 以下分别比较:1. CGI模式与模块模式比较:PHP在apache中两种工作方式的区别(CGI模式.Apache 模块DLL)这两种工作方式的安装:PHP 在 Apache 2.0 中的 CGI 方式ScriptAlias /

LVS原理详解(3种工作方式8种调度算法)

一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集群计算机通常用来改进单个计算机的计算速度和/或可靠性.一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多. 集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务 LVS在企业架构中的位置: 以上的

ftp两种工作方式

ftp是基于tcp的服务,ftp使用2个端口,一个数据端口和一个命令端口(也叫做控制端口).通常命令端口是21,数据端口是20. 为什么要固定两个端口,固定一个为什么不行? 1.两种工作模式(主要针对服务器来说 主不主动) 主动模式:服务器主动数据连接连接客户端 被动模式:服务器等待客户端连接2.NAT服务器地址转换下 1. 服务器在公网 客户端在内网 主动模式 建立命令连接,客户端内网连接公网,NAT自动配置,可以连接, 数据连接,主动模式,公网连接内网,需要NAT做映射 为了简化映射,所以需

Apache下PHP的几种工作方式

PHP在Apache中一共有三种工作方式:CGI模式.Apache模块DLL.FastCGI模式. 一.CGI模式 PHP 在 Apache 2中的 CGI模式.编辑Apache 配置文件httpd.conf 如下: # PHP4 版写法 ScriptAlias /php/ "D:/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php.exe" # PH

从源代码剖析Struts2中用户自定义配置转换器的两种方式——基于字段的配置转换器和基于类型的配置转换器(解决了实际系统中,因没有区分这两种工作方式的生命周期而引起的异常错误问题)

自定义类型转换器必须实现ongl.TypeConverter接口或对这个接口的某种具体实现做扩展 <<interface>>com.opensymphony.xwork2.conversion.TypeConverter à com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter à org.apache.struts2.util.StrutsTypeConverter 接口及类进行解析 TypeConverter(

单片机定时/计数工作方式

单片机中的定时/计数器都能有多种用途,要通过定时/计数器的方式控制字来设置,需要的用途. 在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON.,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已).     TMOD被分成两部份,每部份4位.分别用于控制T1和T0.TCON也被分成两部份,高4位用于定时/计数器,低4位则用于中断(TF1.0在这).TR0

MMU(TLB)与Cache的工作方式

MMU中TLB的作用: 从虚拟地址到物理地址的转换过程可知:使用一级页表进行地址转换时,每次读/写数据需要访问两次内存,第一次访问一级页表获得物理地址,第二次才是真正的读/写数据:使用两级页表时,每次读/写数据需要访问三次内存,访问两次页表(一级页表和二级页表)获得物理地址,第三次才是真正的读/写数据. 上述的地址转换过程打打降低了CPU的性能,有没有办法改进呢?程序执行过程中,所用到的指令.数据的地址往往集中在一个很小的范围内,其中的地址.数据经常多次使用,这称为程序访问的局部性.由此,通过使

php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL

php在apache中一共有三种工作方式:CGI模式.FastCGI .FastCGI是什么? FastCGI是语言无关的.可伸缩架构的CGI开放扩展,其主要行 为是将CGI解释器进程保持在内存中并因此获得较高的性能.众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中 并接受FastCGI进程管理器调度,则可以提供良好的性能.伸缩性.Fail-Over特性等等. FastCGI的官方站点在http://www.fastcgi.com 1.Web Server