跟我一起写操作系统

    返回首页    发表留言
本文作者:李德强
          第一节 实时模式的内存寻址
 
 

        计算机的CPU也就是中央处理器,CPU有很多个引脚,其中有一个引脚叫作重置引脚reset。当CPU加电,或者reset引脚的电平由低电位变为高电位时,CPU就会按照预先设定好的程序对硬件初始化,并对所有的寄存器复位。复位工作会将CS寄存器设定为0xffff,其它的寄存器设定为0x0000。

        CPU在加电或复位时,它的运行模式为实时模式(Real-Time Mode),CPU在实时模式下可用的寻址地址线只有20根,也就是说它最大能够对1MB( )的内存地址进行寻址。这是因为早期的Intel 8086 CPU只有20根地址线,而目前的新型CPU为了能够兼容早期设计在只有20地址线CPU上的程序,所以保留了这一模式。CPU还有一个运行模式叫作保护模式(Protected Mode),关于保护模式的内容我们会在后续的章节中学习。

        在实时模式下CPU采用段地址:偏移地址的方式来寻址,用一个16位的段寄存器和一个16位的地址寄存器来表示一个1M以内的地址,具体的计算方式如下:

实际地址 = 段地址 times 16 + 偏移地址

        也就是说0x1234:0x5678所表示的实际地址为:

实际地址 = 0x1234 * 16 + 0x5678 = 0x179b8

        实际上,一个地址在实时模式下有多种表示方式,比如0x7c00可以用0x0000:0x7c00表示,也可以使用0x07c0:0x000来表示。显然当段地址和偏移地址均为0xffff时就是这种寻址方式所能表示的最大值0xffff:0xffff即:

实际地址 = 0xffff * 16 + 0xffff = 0x10ffef

        刚才我们讲到,在实时模式下CPU只有20根地址总线,所以可用的最大内存地址为1M,也就是0x100000。那么对于多出来的一部分地址,也就是0xffef这部分被重新定向到从0开始的相应地址,比如0x1000ff的实际地址为0x00ff,0x100100的实际地址为0x0100,它们是完全相同的。

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号