按字节编址、按字编址、按字节寻址、按字寻址。

以下内容仅为个人理解,如有错误,还请各位大佬批评指正。

———————————————————————————————————————————

首先捋清楚一个概念。

按字节编址,不仅可以进行按字节寻址,也可以进行按字寻址;

按字编址只能进行按字寻址,是不可以进行按字节编址的(电路设计使然。)

所以凡是遇见对一个存储器进行按字节寻址的,那么默认这个存储芯片就是按字节编址的。

清楚了以上概念之后,我们再来说说按字节编址和按字编址的电路。

在按字节编址的电路中,其会空出几根地址线来表示字中字节的地址,而剩下的根数则表示字的容量。比如 1k*32bit 按字节编址的话,会有32/8 = 2^2,即2根地址线表示其中的字节地址,而剩下的10根地址线来表示字的容量。其总共有12根地址线。

而在按字编址的电路中,则没有空出的地址线来表示字中字节的地址,全部的地址线会用来表示容量。比如 1k*32bit 中共有10根地址线。

清楚了以上的内容之后,再来说说按字节寻址和按字寻址。

在上述按字节编址的1k*32bit的情况中,按字节寻址的范围就是 0-2^12-1,而按字寻址就是0-2^10-1。

在上述的按字编址的1k*32bit的情况中,按字寻址的范围就是0-2^10-1。

看完了上面的内容,我们可以就可以避免以下的误区:并不是按字寻址导致了需要多余的地址线来表示字内字节的地址,而是因为按字节编址的电路就是这样设计的。如果存储器是按字节编址的,那其在按字寻址的时候,就需要减去供区分字节使用的地址线,用剩下的地址线来寻址,而之所以要减去,是因为按字寻址用不上这部分地址线,这部分地址线就是为区分字节而设计的!(所以要根据电路原理来分析,不要想当然的觉得剩下的地址线可以用来按字寻址,更不要将因果混乱,觉得是按字寻址导致了要减少地址线,这不是根本原因!)

接下来根据一些常见的题目,对上述做一个总结。

1)如果告诉你地址线和数据线的根数,要你求按字节寻址范围和按字寻址范围。

【分析】 看到按字节寻址一般是按字节编址的,那么求按字寻址范围的时候,就要注意减去区分字节的那部分地址线就好了。

(数据线的根数等于机器字长,不过一般题目都会默认机器字长等于存储字长。)

2)如果告诉你 1M*32bit 存储器,要你求其地址线和数据线的根数,

【分析】这样的情况,一般默认为按字编址,20根地址线,和32根数据线,一共52根线。

                如果要你求按字节寻址的范围,那么就要默认为按字节编址了,因为按字编址一般是不能实现按字节寻址的。那么就是0-2^22-1

3)如果告诉你 1MB容量的存储器,要你求地址线和数据线的根数。(没有告诉机器字长的情况下,就算告诉了机器字长,也是默认按字节编址。)

【分析】一般默认为 1M*8bit  按字节编址址,地址线20根,数据线8根,一共28根。

以上仅为个人见解,欢迎交流!

你可能感兴趣的:(计算机组成原理,数据结构)