- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在DOS实模式下直接存取4GB内存_0
在DOS实模式下直接存取4GB内存
作为软件开发人员,大多数对于保护模式都感到神秘和不易理解。本人在开发32位微内核抢占式多线程操作系统过程中,深入了解到CPU的地址机理,在这里将分析CPU的工作原理,解开保护模式的神秘面纱,读者将会发现保护模式其实与实模式一样简单和易于控制。在此基础上用四五十行C语言程序做到进出保护模式和在实模式之下直接访问整个4GB内存空间。
虽然有许多书籍对保护模式作解释,但没有一本能简单明了地解释清楚,冗长烦杂的术语让人看着想打瞌睡,甚至还有许多用汇编写的(可能根本不能运行的)保护模式试验程序,事实上用C语言本身就可以做保护模式的进出工作。
我们可能知道CPU上电后从ROM中的BIOS开始运行,而Intel文档却说80x86CUP上电总是从最高内存下16字节开始执行,那么BIOS是处在内存的最顶端64K(FFFF0000H)还是1M之下的64K(F0000H)处呢?事实上在这两个地方都同时出现(可用后面存取4GB内存的程序验证)。
为什么?为了弄清楚以上问题,首先要了解CPU是如何处理物理地址的?真的是在实模式下用段寄存器左移4位与偏移量相加,在保护模式下用段描述符中的基地址加偏移量而两者是毫无关联的吗?答案是两者其实是一样的。当Intel把80286推出时其地址空间变成了24位,从8086的20位到24位,十分自然地要加大段寄存器才行,实际上它们都被加大了,只是由于保护的原因加大的部分没有被程序看见,到了80386之后地址又从24位加大到32位(80386SX是24位)。整个段寄存器如下图所示:
@@;图1@@
在8086中CPU只有“看得见部分”,从而也直接参与了地址形成运算,但在80286之后,在“看不见部分”中已经包含了地址值,“看得见部分”就退化为只是一个标号再也不用参与地址形成运算了。地址的形成总是从“不可看见部分”取出基址值与偏移相加形成地址。也就是说在实模式下当一个段寄存器被装入一个值时,“看不见部分”的界限被设成FFFFH,基址部分才是要装入值左移4位,属性部分设成16位0特权级。这个过程与保护模式时装入一个段存器是同理的,只是保护模式的“不可见部分”是从描述表中取值,而实模式是一套固定的过程。
对于CPU在形成地址时,是没有实模式与保护模式之分的,它只管用基址(“不可见部分”)去加上偏移量。实模式与保护模式的差别实际上只是保护处理部件是否工作得更精确而已,比如不允许代码段的写入。实模式下的段寄存装入有固定的形成办法从而也就不需要保护模式的“描述符”了,因此保持了与8086/8088的兼容性。而“描述符”也只是为了装入段寄存器的“不可见部分”而设的。
从上面的“整个段寄存器”可见CPU的地址形成与“看得见部分”的当前值毫无关系,这也解释了为什么在刚进入保护模式时后面的代码依然被正确地运行而这时代码段寄存器CS的值却还是进入保护模式前的实模式值,或者从保护模式回到实模式时代码段CS被改变之前程序是正常地工作,而不会“突变”到CS左移4位的地址上去,比如在保护模式时CS是08H的选择器,到了实模式时CS还是08H但地址不会突然变成80H加上偏段量中去。因为地址的形成不理会段寄存器“看得见部分”的当前值,这一个值只是在被装入时对CPU有用。
地址的形成与CPU的工作模式无关,也就是说实模式与0特权级保护模式不分页时是一模一样的。明白了这一机理,在实模式下一样可以处理通常被认为只有在保护模式才能做的事,比如访问整个机器的内存。可以不必理会保护模式下的众多术语,或者更易于理解,如选择器就是“看得见部分”,描述符是为了装入“不可见部分”而设的。
作为验证CPU的这种机理,这里写了一个实模式下访问4GB内存的C程序。有一些书籍也介绍有同样功能的汇编程序,但它们都错误地认为是利用80386芯片的设计疏漏。实际上Intel本身就在使用这种办法,使得CPU上电时能从FFFFFFF0H处开始第一条指令,这种技术在286之后的每一台机器每一次冷启动时都使用,只是我们不知道罢了。CPU上电也整个代码段寄存器是这样的:
@@;图2@@
EiP=0000FFF0H
这样CS∶EIP形成了FFFFFFF0H的物理地址,当CPU进行一次远跳转重新装入CS时,基址就变了。
为了访问4G内存空间,必须有一个段寄存器的“不可见部分”的界限为4G-1,基址为0,这样就包含了4GB内存,不必理会可见部分的值。显然要让段寄存器在实模式下直接装入这些值是不可能的。唯一的办法是让CPU进入一会儿保护模式在装入了段寄存器之后马上回到实模式。
进入保护模式十分简单,只要建好GDT把CRO寄存器的位0置上1,CPU就在保护模式了,从前面所分析CPU地址形成机理可知,这时不必理会寄存器的“看得见部分”值是否合法,各种段寄存器是
您可能关注的文档
最近下载
- 2025至2030稀土永磁材料行业发展趋势分析与未来投资战略咨询研究报告.docx
- 高考物理一轮复习重难点逐个突破专题81电磁感应中的单、双棒问题(原卷版+解析).docx VIP
- 部编五年级上册语文单元分析.pdf VIP
- 模拟退火算法课件.pptx VIP
- 2025至2030中国钕稀土磁铁行业发展趋势分析与未来投资战略咨询研究报告.docx VIP
- 2025年安徽高考思想政治真题试卷完全解读(含试卷分析与备考策略).docx VIP
- 2025至2030中国MRI磁铁行业发展趋势分析与未来投资战略咨询研究报告.docx VIP
- 水平三新课标体育与健康教案.pdf VIP
- 《立足课标与课本 科学备战》2025安徽省中考化学复习 策略.pptx
- 土石坝安全监测技术规范.pdf VIP
文档评论(0)