x86保护模式

来源:本网整理

初步鉴定你是WIN10吧,亲。64位系统是模拟运行32位程序,效率会稍差,而且你文件是12年的,当时

处理器架构实际上是不断扩展的,新处理器必须延续旧的设计思路,并保持兼容性和一致性;同时还会有所扩充和增强。

LZ,这个问题我见你你发过好多次了。我上网搜过了,网上确实没有完整版。建议你还是买一本实体书

尽管8086是16位的处理器,但它也是32位架构内的一部分。原因在于,32为处理器架构是从8086那里发展来的,是基于8086的,具有延续性和兼容性。

寄存器的扩展

x86架构是重要地可变指令长度的CISC(复杂指令集计算机,Complex Instruction

32位处理器在16位处理器的从基础上,扩展了这8个通用寄存器(AX,BX,CX,DX,SI,DI,BP,SP)的长度,使之达到32位。

你对硬盘的io操作不知道你的虚拟机是否支持?你改成用int 13h试试?

32位通用寄存器的高16位是不可独立使用的,但低16位保持同16位处理器兼容性。因此,在任何时候他们都可以照往常一样使用。

实模式也就是8086汇编,限制在 1M 的内存范围内编程。保护模式则进行了扩展,可以在 16M

但是32位处理器并不是16位处理器简单的增强。事实上32位处理器有自己的32位工作模式,而我学习的32模式是32位保护模式。在这种模式下,处理器可以使用它全部的32跟地址线,能够访问4GB内存。

古钱币指古代货币。货币是商品交换的产物。中国是世界上最早使用铸币的国家。距今三千年前殷商晚期墓葬出土了不少“无文铜贝”,为最原始的金属货币。至西周晚期除贝比外还流通一些无一定形状的散铜块、铜锭等金属称量货币,这在考古发掘中也有出土。中国钱币创造和打破了中国世界纪录协会多项世界之最、中国之最。乾隆宝通现在可以卖多少钱,值不值钱,这个主要看货币本身的保存质量还有工艺,再加上当代对这个货币的抄作等,总得来说,保存上乘的乾隆宝通相对其它清朝的货币要相对高一些。

在32位模式下,为了生成32位物理地址,处理器需要使用32位的指令指针寄存器。为此,32位处理器扩展了IP,使之达到32位,工作在32位模式下时使用EIP,但是当工作在16位模式下仍使用IP。

钻石恒久远,一颗永流传。婚戒是爱的见证,是幸福的标志,对于每一个新娘来说,一颗心仪的婚戒,这是一生最大的夙愿!明星也一样,他们也是人呀!虽然他们一生可能会不停的换婚戒,和不同的人牵很多次手。刘诗诗婚戒---5克拉,价值1200万元。对于婚礼,四爷也是非常用心的,婚戒的选择上也非常谨慎,5克拉的钻戒寓意非凡。杨颖婚戒--5.53克拉,价值超千万。拍戏最烂夫妻档,结婚时婚戒肯定不能输给别人!!5.53克拉,很豪吧!一部烂片就赚回来了!郭晶晶婚戒---3克拉,值140万港元,霍家有钱吧,人家也就3克拉,太低调了!大S婚戒---5克拉,汪小菲为大S亲手设计的钻戒重约5克拉!看到现在俏江南的状态,不知道

对于32位模式下因为IA-32架构的处理器是基于分段模型,可是32位模式下,对内存的访问从理论上不需要分段,因为它可以自由访问任何一个内存位置。所以引入了平坦模型,即只分一个段,段的基址是0x00000000,段的长度是4GB,在这种情况下视为不分段。

不是因为土腥味儿吗?我们要明白一个理,鲶鱼再怎么适应性强,渔民也不会故意用脏水甚至粪水去饲养它们,细菌多了,鲶鱼也一样会生病死亡,所以不能把原因都归结为饲养环境脏。鲶鱼和鮰鱼(也叫江团)是同一目的近亲,两种鱼的口感接近,但鮰鱼没有那种土腥味儿,大多数地区现在也都能买到鮰鱼,且价格没有很高,如果对水产稍微了解一些,为何不愿意吃鮰鱼?(鮰鱼,图片来自网络)当然,很多人购买时不太容易区分这两种鱼,我自己早先年也不懂,买多了就知道了,最简单的一招就是看尾鳍分不分叉,分叉的是鮰鱼,而不分叉的是鲶鱼(至少市面上卖的是这么个规律)(鲶鱼,图片来自网络)鲶鱼的土腥味儿和它的习性有一定关系,毕竟这货喜欢吃腐殖质

在32位模式下,处理器要求在加在程序时,先定义该程序所拥有的段,然后允许使用这些段。定义段时,除了基地址外,还附加了段界限,特权级别,类型等属性。当程序访问一个段时,处理器将用固件实施各种检查工作,以防止对内存的违规访问。

人食肉的天性,也是基于人类进化过程中的一个过程。但是人食肉,不是说的就是\"狗肉\"。现在一个人与自然的角度来看待,爱狗爱宠物的问题的话,这一个行为不反对,也不支持。因为人类的进化和发展到这样的一步,是自然的选择,我们无法改变人类去吃一些动物肉的现象,也更不可能去改变,这是一个必然的进化结果。当然,在属于没有思维意识的其他物种中,他们也是有情感的一类,而人本身就是感情丰富的人,因而也固然存在爱狗的人。我们也不能以这样的爱的道德绑架来说人类吃狗肉,动物肉就是一种残忍,需要法律保护等。这也必然不可能。不要违背自然的原则。只是在当今我们太多的商业导致人类过度的烂杀,破坏了很多自然的发展的平衡,因而很

在32位模式下,传统的段寄存器,如CS,SS,DS,ES,保存的不再是16位段基地址,而是段的选择子(实模式下是段寄存器,在保护模式下就是段选择子,因为在保护模式下他们存储的不再是段地址而是段描述符在描述符表中的索引号),即用于选择要访问的段,除了段选择子外,每个段寄存器还包括一个不可见部分,称为描述符高速缓冲器,里面有段的基地址和各种访问属性。

在保护模式下访问一个段的时候,传送到段选择器的是段选择子。他由三个部分组成,第一部分是索引号,用来在描述符表种选择一个段描述符。T1是描述符表指示器,T1=0时,描述符在GDT中,T1=1时,描述符在LDT中。RPL是请求特权级,表示给出当前选择子的那个程序的特权级

这里写图片描述

线性地址

我们传统上讲的,段地址个偏移地址称为逻辑地址,偏移地址叫做有效地址,在指令中给出有效地址的方式叫做寻址方式。

然而段的管理是由处理器的段部件负责进行的,段部件将段地址和偏移地址相加,得到访问内存的地址。一般来说,段部件产生的地址就是物理地址。

但是为了解决内存空间碎片化(内存每次分配大小不定,时间长后会产生过多过小的内存空间块),IA-32处理器支持分页功能,分页功能将物理内存空间划分成逻辑上的页。通过使用页,可以简化内存管理。

当页功能开启时,段部件产生的地址就不再是物理地址了,而是线性地址,线性地址还要经过页部件转换后,才是物理地址。

线性地址的概念用来描述任务的地址空间。IA-32处理器上的每个任务拥有4GB的虚拟内存空间,这是一段长4GB的平坦空间,就像一段平直的线段。相应的,由段部件产生的地址,就对应着线性地址空间上的每一个点,这就是线性地址。

全剧描述符表

在保护模式下,对内存的访问仍能使用段地址和偏移地址,但是,在每个段能够访问之前,必须先进行登记。当你访问的偏移量超出段的界限时,处理器就会阻止这种访问,并产生一个叫做内部异常的中断。

断描述符,用八个字节来描述一个段有关的信息。为了存放这些描述符,需要在内存中开辟一段空间,在这段空间里,所有的描述符都是挨在一起,集中存放的,这就形成了一个描述符表。

最主要的描述符表是全局描述符表(GDT),在进入保护模式前,必须要定义全局描述符表。

这里写图片描述图品出自

为了跟踪全局描述符表,处理器内部有一个48位的寄存器,称为全局描述符表寄存器(GDTR)。该寄存器高32为存放全局描述符表线性基地址,低16位存放全局描述符表边界。

因为GDT的界限是16位所以表的大小最多是2^16字节(64KB),又因为全局描述符大小为8字节,所以最多可以定义8192个描述符。

虽说基地址有32位,但是由于在进入保护模式之后,处理器立即要按新的内存访问模式工作,所以,必须在进入保护模式之前定义GDT。但是,由于在实模式下只能访问1MB的内存,故GDT通常都定义在1MB以下的范围内。也允许在进入保护模式之后换位置重新定义GDT。

段描述符中的段属性也被安排在两个域中。下面对其定义及意义作说明。

(1)G为就是段界限粒度(Granularity)位

G=0表示界限粒度为字节;G=1表示界限粒度为4K 字节。注意,界限粒度只对段界限有效,对段基地址无效,段基地址总是以字节为单位。

(2)D/B位是一个很特殊的位在描述可执行段、向下扩展数据段或由SS寄存器寻址的段(通常是堆栈段)的三种描述符中的意义各不相同

在描述可执行段的描述符中,D位决定了指令使用的地址及操作数所默认的大小。

D=1表示默认情况下指令使用32位地址及32位或8位操作数,这样的代码段也称为32位代码段;

D=0 表示默认情况下,使用16位地址及16位或8位操作数,这样的代码段也称为16位代码段,它与80286兼容。可以使用地址大小前缀和操作数大小前缀分别改变默认的地址或操作数的大小。

在向下扩展数据段的描述符中,D位决定段的上部边界。

D=1表示段的上部界限为4G;

D=0表示段的上部界限为64K。

在描述由SS寄存器寻址的段描述符中,D位决定隐式的堆栈访问指令(如PUSH和POP指令)使用何种堆栈指针寄存器。

D=1表示使用32位堆栈指针寄存器ESP;

D=0表示使用16位堆栈指针寄存器SP。

(3)AVL位是软件可利用位

80386对该位的使用未做规定,此位被linux和windows操作系统忽略。

(4)P位称为存在(Present)位

P=1表示描述符对地址转换是有效的,或者说该描述符所描述的段存在,即在内存中;P=0表示描述符对地址转换无效,即该段不存在。使用该描述符进行内存访问时会引起异常。

(5)DPL表示描述符特权级(Descriptor Privilege level)

共2位。它规定了所描述段的特权级,用于特权检查,以决定对该段能否访问。

(6)DT位说明描述符的类型

对于存储段描述符而言,

DT=1,以区别与系统段描述符和门描述符(DT=0)。

(7)TYPE说明存储段描述符所描述的存储段的具体属性

这里写图片描述

其中的位0指示描述符是否被访问过(Accessed),用符号A标记。

A=0表示尚未被访问,

A=1 表示段已被访问,

当把描述符的相应选择子装入到段寄存器时,80386把该位置为1,表明描述符已被访问,操作系统可测试访问位,已确定描述符是否被访问过。

此为位1,对应的type为奇数,因此type对应的数值为奇数时标识该描述符被访问过,否则为偶数标识未被访问过(可从前面的表中看出)

综上我们可以看到在类型不同时,段描述符的区别之处,如下所示

代码段描述符

表示这个段描述符代表一个代码段,它可以放在GDT中。该描述符置S标志为1。

数据段描述符

表示这个段描述符代表一个数据段,它可以放在GDT中,该描述符置S标志为1。

任务状态段描述符

表示这个段描述符代表一个任务状态段,也就是说这个段用于保存处理器寄存器的内容。它只能出现在GDT中,根据相应的进程是否正CPU上运行,其Type字段的值分别为11或9。这个描述符的S标志置为0。 $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering.fadeIn(1700); }); });

    本文转载自wrx1721267632博客,版权归wrx1721267632所有

    扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

    80x86 保护模式 保护的是什么?

    简单地理解,保护模式中给每一个段都添加了一些权限的控制,还增加了执行权限的概念。

    每个段可以单独设置可执行,可读,可写等权限。

    对于执行的时候,分为内核态和用户态两种,内核态可以执行一些特殊的指令,而用户态只能只能执行一些比较简单普通的指令,这样可以防止用户直接操作硬件。

    上面的特性都是实模式下没有的。更多追问追答追问谢谢你的回答,但是我还是不太清楚,保护模式到底保护的的是什么,,,追答你看,每一个段都加上正确的权限之后,就不是什么操作都能执行的了,比如,一个只读的段就不会被写了,这只是保护的一个例子。追问在您举的这个例子当中,读写的权限是谁决定的呢,决定的依据是什么?追答这个权限一般是由操作系统来决定的。比如C程序中生命了const的东西会放到.rodata,这个段显然是不可写的,但是可读。

    编译器在编译源代码的时候会把代码和数据放到正确的段中。

    比如操作系统需要执行一个可执行程序的时候,会把可执行程序一个段一个段地加载到内存,当操作系统发现当前段是代码段的时候就把这个段设置为可读且可执行,但是不可写,如果发现是数据段,那么这个段就是可读可写但是不可执行,通过这样的方法来保证不该被执行的代码被执行。

    小女子求:x86汇编语言-从实模式到保护模式完整版

    我刚下载到了扫描版。。68MB。。要不要百度盘share给你。。。

    链接: http://pan.baidu.com/s/1pJFUbwR 密码: fn86

    《x86汇编语言:从实模式到保护模式》相关工具

    不如看30天自制操作系统,简单,也有实模式跳转到保护模式的完整代码本回答被网友采纳

    80x86保护模式编程的好书如题 谢谢了

    x86汇编语言-从实模式到保护模式 不错 你还可以下个 《保护模式下80386编程》!想买就买 《x86汇编语言-从实模式到保护模式》 和《X86/X64结构探索及编程》前者 网上只有前13章 后者只能买

  • 本文相关:
  • Git--创建与合并分支
  • SimRank--基于结构的相似度度量方法学习笔记
  • 《UNIX环境高级编程》--6系统数据文件和信息
  • 【在线笔试题解题报告系列】微软在线笔试之 2016微软探星夏令营在线技术笔试(时间:2016.07.17)
  • [从头读历史] 第307节 星球战争 BC2699 至 BC2600(公元前27世纪)
  • ISO8583报文协议详解
  • cs231n - assignment1 - neural net 梯度推导
  • 80x86微处理器结构及其工作模式
  • 五大NAT穿透方法,解决内网问题
  • 动态代理及其两种实现方式(JDK、CGLIB)
免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
Copyright © 2017 www.zgxue.com All Rights Reserved