读书人

例如cpu的数据总线位数为32为什么要

发布时间: 2012-12-29 10:28:09 作者: rapoo

比如cpu的数据总线位数为32,为什么要规定cpu只能从4的倍数开始读?
比如cpu的数据总线位数为32,为什么要规定cpu只能从4的倍数开始读?

我知道cpu一次可以读取4个字节,这样可以提高速度。

我还知道如果比如一个int型如果放在地址不对其的位置要通过多次读取->移位去掉无用字节->拼接得到。

我的问题是为什么不规定可以从任意位置可以读取4个字节呢?而一定要从4开始,如果可以从任意位置开始读4个字节,那么内存不对其的4个字节也就一次读取了
[解决办法]
这个问题和存储的结构和寻址方式有很大关系。正如楼主所言,每次取4位是为了提高效率,所以我们以下的讨论都围绕一次取思维讨论。
1. 存储器其实是很多个存储单元组成的阵列,需要通过地址起寻址找到对应的存储单元。一般存储器都将地址分成了行地址和列地址。每当输入一个地址的时候,通过译码器,每个行地址对应一行,每个列地址选中一类,行和列的交叉就是我们要寻址的存储单元。如果按楼主的思路就有可能导致存储单元分散到不同的行和列,通过传统的译码方式就很难寻址成功了。这必然会导致译码电路复杂从而降低效率也就是速度。
2. 每当选中存储单元之后,数据就被传到了数据线上,然后进一步到达寄存器。当我们想要取1,2,3,4四个单元是,假设0-7,8-15,16-23,24-31数据线正好分别对应四个单元,但是如果我们存储2,3,4,5的时候也要求他们分别对应0-7,8-15,16-23,24-31数据线,这就必然要有一个专门的电路进行这些操作。而现有的按4的倍数寻址就不存在这样的问题了。每个存储单元永远只对应8根地址线,不需要额外的电路,了不起就是为每个数据线对应一个类似三态门的读写电路。
[解决办法]
楼主2楼的理解是对的

但是,内存读取,并不仅仅读取32位数据,也有8位字节的读写需要;
另外,IO读取也是使用地址总线传递地址,也需要只读取字节的地址;

使用地址总线的低两位不是无用的

读书人网 >软件架构设计

热点推荐