段地址x16+偏移地址=物理地址的本质含义
物理地址
CPU访问内存单元时,要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间都有唯一的地址,我们将这个唯一的地址称为物理地址。
CPU通过地址总线送到存储器的,必须是一个内存单元的物理的地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址,不同的CPU可以有不同的形成物理地址的方式,我们现在讨论8086CPU是如何在内部形成内存单元的物理地址的。
16位结构的CPU
我们说的8086CPU的上一代CPU(8080,8085)等是8位机,而8086是16位机,也可以说8086是16位结构的CPU,16位结构描述了一个CPU具有下面以下几方面的结构特性
- 运算器一次最多可以处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路为16位
8086CPU给出物理地址的方法
8086CPU有20位地址总线,可以传送20位地址,达到1MB寻址能力,8086CPU又是16位结构,在内部一次性处理,传输,暂时存储的地址为16位,从8086CPU的内部结构来看,如果将地址从内部简单地发出,那么它只能送出16位的地址,表现出的寻址能力只有64KB
- 8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
如图所示:
当8086CPU读写内存时:
- CPU中的相关部件两个16位的地址,一个称为段地址,另一个称为偏移地址
- 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
- 地址加法器将两个16位地址合成为一个20位的物理地址
- 地址加法器通过内部总线将20位物理地址送入输入输出控制电路
- 输入输出控制电路将20位物理地址送上地址总线
- 20位物理地址被地址总线传送到存储器
地址加法器采用物理地址=段地址X16+偏移地址的方法用段地址和偏移地址合成物理地址。如图所示:
段地址x16+偏移地址=物理地址的本质含义
本质含义:
- CPU在访问内存时,用一个基础地址和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
- 更一般的说,8086CPU的这种寻址功能是"基础地址+偏移地址=物理地址"寻址模式的一种具体实现方案,8086CPU中,段地址x16可看作是基础地址。
我们用2个与CPU无关的例子做进一步的比喻说明
你要去图书馆,问我那里的地址,我可以用两种方式告诉你图书馆的地址:
- 从学校2826m到图书馆,这2826m可以认为是图书馆的物理地址
- 从学校走2000m到图书馆,从体育馆再走826m到图书馆。第一个距离2000m,是相对于起点的基础地址,第二个距离826m是相当于基础地址的偏移地址(以基础地址为起点的地址)。
我们为上面的例子加一些限制条件,比如,只能通过纸条来互相通信,你问我图书馆的地址我只能将它在纸条上告诉你,显然,我必须有一张可以容纳4位数据的纸条,才能写下2826这个数据。
可以写下4位数据的纸条 |
---|
2 8 2 6 |
可不巧的是,我没有能容纳4位数据的纸条,仅有两条可以容纳3位数据的纸条,这样我只能以这种方式告诉你2827这个数据。
2 0 0 | 8 2 6 |
在第一张纸条上写上200(段地址),在第二张纸条上写下826(偏移地址),假设我们事前对这种情况又有过相关的约定,你得到这两张纸后,做这样的运算:200(段地址)X10+826(偏移地址)=2826(物理地址)
- 8086CPU就是这样一个只能提供两张3位数据纸条的CPU