有关存储器寻址的问题

“存储器可以按字节寻址,也可按字寻址。”这种说法是正确的。

有些型号的计算机是按字节寻址(按字节编址,按字节访问)的,硬件实现比较简单,有多少位的地址,系统就有多少位的地址总线,CPU就有多少位的地址引脚。按字节寻址数据传输能力小(一次一个字节)。

有些型号的计算机是按字来寻址(按字编址,按字访问)的,硬件实现也比较简单。一个字为若干字节,按字单元编址,地址位数少,同时按字单元访问,数据位数(数据线位数)多,数据传输能力大。

也有些型号的计算机即可按字节寻址,又可按字寻址(按字节编址,按字节或字访问),硬件实现较复杂。我们现在所用的微机就属这一类型。

在你以下所举例子中:

例如:一个1M*32位(4MB)的存储器,可以得到,该存储器有2^20个字存储单元,数据线宽度为32,地址线宽度为20。当按字寻址时,需要20位的地址来表示一个地址编号;当按字节寻址时,则需要22位的地址来表示一个地址编号。而地址线只有20位,如果按字节寻址的话,貌似不够。

如果用20位的地址按字节寻址4MB的内存,肯定是不够的。若该存储器只有20位地址线既能按字寻址,又能按字节寻址,则必有控制对一个字内的四个字节的单独寻址的信号线。

下以微机系统为例加以说明。

8086CPU中,字长为16位(2字节),CPU20位的地址引脚(A19A16AD15AD0),16位数据引脚(AD15AD0注意8086CPU的数据引脚和低16位地址引脚是共有的,采用分时复用的办法分别传送地址和数据)。可以按字节或字访问1MB的的内存单元。另外CPU还有一个BHE引脚,它与地址引脚A0一块决定对内存的访问。

BHE

A0

内存访问状态

0

0

偶地址访问内存字单元,16位数据通过16位数据引脚(AD15AD0)传送

0

1

奇地址访问内存字节单元,8位数据通过高8位数据引脚(AD15AD8)传送

1

0

偶地址访问内存字节单元,8位数据通过低8位数据引脚(AD7AD0)传送

1

1

无操作

80286CPU中,字长也为16位,CPU24位地址引脚(A23A0),16位的数据引脚(D15D0),地址引脚和数据引脚分离,可以按字节或字访问16MB的内存。CPU也设有一个BHE引脚,它与地址引脚A0一块决定对内存的访问,实现方法与8086相同。

80386CPU中,字长增加到了32位(4字节),CPU30位地址引脚(A31A2而没有A1A0),32位的数据引脚(D31D0),可以按字节(8位)、半字(16位)或字(32位)访问最多为4GB的内存。这里就出现了问题,怎样用30位地址字节访问4GB的内存呢?解决办法是80386CPU又设置了BE3BE0四个引脚,称为是字节允许引脚(低电平有效),它们和30位的地址引脚一块儿决定对内存的访问方式(按字节、半字、字访问)。因此80386CPUA31A2BE3BE0共同决定了对4GB内存访问的32位地址。

出处: Spirit's Home
原文地址: http://www.7788sky.cn/post/8086-xunzhi.html



关于 McKelvin

a hacker who's interested in `music computing` and `network security`.
此条目发表在 Interest 分类目录,贴了 标签。将固定链接加入收藏夹。