实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)

【-1】写在前面:

以下部分内容总结于 http://blog.csdn.net/ruyanhai/article/details/7181842

complementary: 兼容性是指运行在前期CPU,如8086/8088上的的程序,也可以运行在其以后的处理器,如80286上;


【0】看看intel处理器的发展历程


【1】8086/8088的寻址和问题

1.1)寻址:在8086/8088中,只有20根地址总线,所以可以访问的地址是2^20=1M,但由于8086/8088是16位地址模式,能够表示的地址范围是0-64K,所以为了在8086/8088下能够访问1M内存,Intel采取了分段的模式:16位段基地址:16位偏移。其绝对地址计算方法为:16位基地址左移4位+16位偏移=20位地址;(这个比较简单)

1.2)问题: 但这种方式引起了新的问题,通过上述分段模式,能够表示的最大内存为:FFFFh:FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes(1M多余出来的部分被称做高端内存区HMA)。但8086/8088只有20位地址线,如果访问100000h~10FFEFh之间的内存,则必须有第21根地址线。所以当程序员给出超过1M(100000H-10FFEFH)的地址时,系统并不认为其访问越界而产生异常,而是自动从重新0开始计算,也就是说系统计算实际地址的时候是按照对1M求模的方式进行的,这种技术被称为wrap-around。


【2】80286的寻址和问题

2.0)寻址: 到了80286,系统的地址总线发展为24根,这样能够访问的内存可以达到2^24=16M。Intel在设计80286时提出的目标是,在实模式下,系统所表现的行为应该和8086/8088所表现的完全一样,也就是说,在实模式下,80286以及后续系列,应该和8086/8088完全兼容;

2.1)问题:如果程序员访问100000H-10FFEFH之间的内存,80286将实际访问这块内存,而不是像过去一样重新从0开始,因为80286有这个寻址能力,但是这就不能满足和8086/8088的系统兼容性,因为8086/8088不能访问到100000H-10FFEFH之间的内存的真实地址而是按照对1M求模的内存寻址方式;


【3】再浅谈80286 和 8086/8088 间的兼容性问题:(实模式下,80286的系统表现要同8086/8088的一致)

3.1)当A20被禁止时:程序员给出100000H~10FFEFH间的地址,80286和8086/8088 的系统表现是一致的,即按照对1M求模的方式进行寻址,满足系统升级的兼容性问题;

3.2)当A20被开启时:程序员给出的100000H~10FFEFH间的地址,80286是访问的真实地址,而8086/8088是始终是按照对1M求模的方式进行的(这里注意,是始终);


【4】解决方法:

为了解决上述问题,IBM使用键盘控制器上剩余的一些输出线来管理第21根地址线(从0开始数是第20根),被称为A20Gate:如果A20 Gate被打开,则当程序员给出100000H-10FFEFH之间的地址的时候,系统将真正访问这块内存区域;如果A20Gate被禁止,则当程序员给出100000H-10FFEFH之间的地址的时候,系统仍然使用8086/8088的方式。


【5】有请实模式+保护模式闪亮登场(干货)

5.1)实模式:实模式就是, 为了实现系统升级的兼容性,如80286的系统表现(包括80286以后的CPU)要与8086/8088 的系统表现一致,就需要80286 CPU访问100000H-10FFEFH之间的地址的时候, 按照对1M求模的方式进行, 无论A20地址线开启关闭与否, 这种内存访问情况 称为实模式;

5.2)保护模式:保护模式就是, 以A20地址线开启为前提,80286 CPU访问100000H-10FFEFH之间的地址的时候, 是访问真实的内存地址,不是求模访问,如访问100001H,就是真真切切地 访问 0x 100001H,而不是求模的 0x000001H 地址, 这种内存访问情况称为保护模式;

5.3)诞生日: 实模式是从8088/8086 就开始存在了, 而保护模式从 80286 才开始存在;


【6】为什么需要保护模式?(因为实模式与生俱来,是伴随着8088/8086 从天而降的,它仅仅是访问内存的一种方式而已; 还有对于8086/8088而言,它只有实模式这一种内存寻址方式,而对于80286包括其以后的CPU,有实模式和保护模式两种寻址方式,因为要兼顾系统兼容性)

显然随着CPU的升级,8088/8086的内存寻址方式已经无法满足需要,也可以说,为了能够访问10FFEFH以上的内存,则必须进入保护模式;


【7】A20被禁止+被开启的不同结果

7.1)如果A20Gate被禁止:对于80286来说,其地址为24bit,其地址表示为EFFFFF;对于80386极其随后的32-bit芯片来说,其地址表示为FFEFFFFF。这种表示的意思是如果A20Gate被禁止,则其第20-bit在CPU做地址访问的时候是无效的,永远只能被作为0;

7.2)如果A20 Gate被打开:则其第20-bit是有效的,其值既可以是0,又可以是1;

7.3)所以:在保护模式下,如果A20 Gate被打开,则可以访问的内存则是连续的;如果A20Gate被禁止,则可以访问的内存只能是偶数段,

因为是20位(从0始)总为零,所23~20位只能是0000、0010、0100、0110、1000、1010、1100、1110对应十六进制为0、2、4、6、8、A、C、E。对应的十六进制地址段是000000-0FFFFF,200000-2FFFFF,400000-4FFFFF…

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 14:42:41

实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)的相关文章

《80X86汇编语言程序设计教程》十 实模式与保护模式的切换实例

1.  再次声明,需要纯DOS系统才能看到满意测试效果.内容是演示实模式与保护模式切换实例,实现功能是16进制显示从110000H开始的256个字节的值 2.  源代码如下: 1 ;功能:演示实模式与保护模式的切换,16进制显示从110000H开始的256个字节的值 2 ;16位偏移的段间直接转移指令的宏定义,这是一个JMP指令到所描述的地址 3 4 JUMP macro selector,offsetv 5 db 0eah ;操作码 6 dw offsetv ;16位偏移 7 dw selec

第04章 保护模式入门

1 实模式 1.1 实模式缺点 保护模式强调的是保护,是在Intel 80286中首次出现. 实模式的特点: 实模式下,操作系统和用户程序属于同一特权级. 用户程序所使用的地址都指向真实的物理地址,也就是说逻辑地址等于物理地址 用户程序可以使用任意段基址,修改内存中任意数据. 访问超过64KB数据需要切换段基址 一次只能运行一个程序 共20条地址线,最大可寻址的内存为1MB 为了克服这种不安全的内存管理.处理器厂商,开发出保护模式.物理内存不能直接被程序访问,程序内部的地址需要被转化位物理地址再

保护模式

保护模式 保护模式 保护模式下的段 段选择器 保护模式下,段寄存器CS,DS,ES,,FS,GS,SS,称之为段选择器. 段选择器中的数据称为段选择子 段选择子 : 描述符索引(13位) | TI | RPL 其中 描述符索引:GDT描述符表中的描述符的索引号(从0开始:0,1,2,3...) TI: TI = 0 表示GDT描述符, TI =1 表示LDT描述符 RPL: 请求权特级: 段选择子如图 当我们跳转到段的时侯,实际上是段选择器赋值为以上格式的值即可. ** 保护模式寻址方式** 实

Lab_1:练习3——分析bootloader进入保护模式的过程

文章链接:https://www.cnblogs.com/cyx-b/p/11809742.html 作者:chuyaoxin 一.实验内容 BIOS将通过读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行bootloader.请分析bootloader是如何完成从实模式进入保护模式的. 提示:需要阅读小节"保护模式和分段机制"和lab1/boot/bootasm.S源码,了解如何从实模式切换到保护模式,需要了解: 为何开启A20,以及如何开启A20 如何初始化GDT表 如何使能和

x86CPU 实模式 保护模式 傻傻分不清楚? 基于Xv6-OS 分析CR0 寄存器

基于Xv6-OS 分析CR0 寄存器 之前一直觉得晕乎乎的...啥?什么时候切换real model,怎么切换,为什么要切换? ------------------------------------------------------------------------------------------------------------------------------------------- 下面这段代码来自Xv6的boot/boot.S 这就是CPU real model 和 pr

第12课 - 实模式到保护模式(下)

不一般的jmp(s16->s32) 在16位代码中,所有的立即数默认为16位 从16位代码段跳转到32位代码段时,必须做强制转换 深入保护模式:定义显存段 为了显示数据,必须存在两大硬件:显卡 + 显示器 显卡 为显示器提供需要显示的数据 控制显示器的模式和状态 显示器 将目标数据以可见的方式呈现在屏幕上 显存的概念和意义 显卡拥有自己内部的数据存储器,简称显存 显卡的工作模式:文本模式&图形模式 在不同的模式下,显卡对显存内容的解释是不同的 可以使用专属指令或int 0x10中断改变显卡工

CPU 实模式 保护模式 和虚拟8086模式

从80386开始,CPU有三种工作方式:实模式,保护模式和虚拟8086模式.只有在刚刚启动的时候是real-mode,等到操作系统运行起来以后就切换到protected-mode.实模式只能访问地址在1M以下的内存称为常规内存,我们把地址在1M 以上的内存称为扩展内存.在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间; 扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持; 支持多任务,能够快速地进行任务

第16课 - 保护模式中的特权级(中)

一种新的描述符:门描述符(Gate Descriptor) 通过门描述符在不同特权级的代码间进行跳转 根据应用场景的不同,门描述符分为: 调用门(Call Gates) 中断门(Interrupt Gates) 陷阱门(Trap Gate) 任务门(Task Gate) 门描述符的内存结构 每一个门描述符占用8字节内存 不同类项门描述的内存含义不同 调用门描述符(Call Gates)的定义 调用门描述符的工作原理 调用门描述符的使用 汇编小贴士 汇编语言中的跳转方式 段内跳转:call,jmp

第十四天、保护模式开启

loader的任务有两个:开启保护模式,将核心 kernel 载入内存.保护模式照抄上次的代码就行, kernel 嘛,先读个文本文件到内存,然后显示出来--检查下效果就行. 常量里加上 kernel.bin 载入内存的段基址 ; Constant.inc ; 常量 ; 四彩 ; 2015-11-17 %ifndef _CONSTANT_INC %define _CONSTANT_INC ; ====================================================