80x86中除8086/8088只能在实模式下工作外,其他微处理器均可在实模式或保护模式下工作。实模式就是为8086/8088而设计的工作方式,实模式下允许的最大寻址空间为1MB。它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法。
1.存储器地址的分段 段:程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。段的最大长度为64KB,以便能用16位二进制数表示段内地址。 小段:从0地址开始,每16字节为一小段。小段的首地址用16进制数表示时其最低位为0。 段的起始地址:段不能起始于任意地址,而必须从任一小段(paragraph)的首地址开始。 物理地址、段地址、偏移地址 1.物理地址(PA):在1MB的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址(20位)。20位物理地址由16位段地址和16位偏移地址组成。 2.段地址:段起始地址的高16位值(16位),低4位固定为0被省去。 3.偏移地址(偏移量EA):指在段内相对于段起始地址的偏移值(16位)。 4.物理地址 = 段地址×10H + 偏移地址。用段地址:偏移地址表示。 2.段寄存器 段寄存器:在8086~80286中,有4个专门存放段地址的寄存器。 代码段CS:存放当前正在运行的程序。 数据段DS:存放当前运行程序所用的数据。 堆栈段SS:定义堆栈的所在区域。 附加段ES:附加的数据段。在80386及其后又增加了FS和GS两个附加数据段寄存器。 除非专门指定,一般情况下,各段在存储器中的分配是由操作系统负责的。而且允许段重叠。如果段超过64KB则将其作为2个以上的段,并动态修改段地址。 3.保护模式存储器寻址 从80286起,就引出了保护模式的存储器寻址,其直接原因:首先是实模式的寻址空间为1MB,这不能满足80286的16MB和80386等的4GB或更多的地址空间寻址。其次是为了使微机系统能支持多任务处理。在系统支持多任务功能的同时,系统也支持了虚拟存储器特性。 1)逻辑地址 在实模式下逻辑地址即为段地址:偏移地址。物理地址 = 段地址×10H + 偏移地址 在保护模式下逻辑地址则由选择器和偏移地址两部分组成。选择器存放在段寄存器中,但它不能直接表示段基地址,而由操作系统通过一定的方法取得段基地址,再和偏移地址相加,从而求得所选存储单元的物理地址。 2)描述符 描述符用来描述段的大小、段在存储器中的位置及其控制和状态信息,它由基地址、界限、访问权和附加字段四部分组成。描述符的内容是由系统设置的,而不是由用户建立的。 基地址(base)部分用来指定段的起始地址; 界限(limit)部分存放着该段的段长度; 访问权(access rights)部分用来说明该段在系统中的功能,并给出该段的一些控制信息; 附加字段部分在386及其后继机型中存在,它用来表示该段的一些属性。 系统按选择器的内容,根据指定的途径可以找到所选段对应的描述符,从而可以根据其给出的基地址和界限值,确定所要找的存储单元所在的段,再加上逻辑地址中指定的偏移地址,就可以找到相应的存储单元。 |
电工学习网 ( )
GMT+8, 2021-12-6 20:45