一根地址线只能传输一个二进制,为什么寻址能力8KB的CPU的地址总线宽度却为13而非16?

汇编语言王爽的习题1.1有这么一道题:

1个CPU寻址能力为8KB,那么它的地址总线宽度为____
(答案为13,https://bbs.csdn.net/wap/topics/370194477有解释)

可我认为是16!因为8KB=8 * 1024 B=2^13 B=2^16 bit,所以N=16

我看到上面的答案都不把B转换成bit,这是为什么呢?书上说如果有N根地址线,那么地址总线宽度为2^N,而一根地址线只有0、1两种状态的二进制,那我自然应该先把单位转换成bit才能用2^N这个公式吧?实在不明白为什么要保留个byte。


书上说,一根导线可以传送的稳定状态只有两种——可如果寻址寻的是字节,岂不是说一根导线可以传送的稳定状态却有8种嘛?

而且书上对于“CPU地址总线宽度”的定义:一个CPU有N根地址线,则可以说这个CPU的地址总线宽度为N。

从以上定义,总线宽度应该只和地址线数量有关,和其他一切都无关。而一根地址线只能传送2种状态,所以我认为应该使用bit来计算而不是byte

先解释一下B(字节)和bit(位)吧,每个0或1就是一个位(bit),位(bit)是内存的最小单位,字节(B):表示常用8位二进制称为一字节。
一个内存单元是8bit也就是一个字节。你不要把这个搞到寻址上去了。
寻址就是用一个数字表示一个字节存储单元的地址,而不是表示这个存储单元中的内容,所以不用乘以8.
寻址是找内存单元的地址。也就是说用一个数来描述是哪一个内存单元。

1位的地址总线可以描述2个数据 就是0 和 1。
也就是1位的地址总线可能确定的地址有2种。
8K = 2 ^13 。
要在这么多个数里面确定一个位置。就需要一个13位2进制数。
所以地址总线的宽度应该是13。

图片说明
寻址单位是字节(Byte),不是位(Bit)

1个CPU寻址能力为8KB=8192=2^13,所以是13
寻址寻的是字节,不是位

比如说地址 100H,是第256个字节的内容,不是第256个二进制位的内容。

我们用的32bit芯片,寻址能力是4GB,而不是512MB,否则我们64bit系统要早5、6年普及了。2002年的电脑,基本上就是256, 512兆的,那时候显然还没有64bit。

很明显8kb=8 * 1024=8192byte 8192 是2的13次方所以总线宽度为13

假设从n个数抽出表示排列组合数可以达到8K个,也就是2的n次方等于 8K, 8K= 8 * 1024 又等于 2的13次方, 所以n等于13;
即得出结果。
这句话不好理解,详细说明就是:
假设有N根总线,那么根据分步计数原理可以:
第一根导线可以表示2种状态,第二根导线可以表示2种状态,.... 第N根导线可以表示2种状态;
这些步骤全部做完,即这些导线全部参与工作才表示这N根导线表示的一个数字,所以是分步计数原理,每步的计数要相乘:
于是2的N次方,所表示的数字,一定要大于等于8k(即2的13次方), 所以可以知道N等于13。

你看说这么多,都是在说数学知识,其他和计算机却没有关系。

8*1024=2的几次方,所以算出来是2的13次方,所以地址总线宽度是13.

到字节就停了 没必要往位上去寻的

是13位的,抽象点来说这是一个很底层的问题,就像另外一个问题,即指针的大小是否只能是8位或者16位或者32位等等,其实在一些嵌入式平台中,指针的大小可以为任何位,比如
指针的大小可以为10位,举例:PIC16平台,如果每一块RAM有8根地址线,有四块RAM放在芯片中,则每次访存,不管是取值还是存值都需要通过一个两位的bank寄存器来对RAM进行选择以取到正确的变量,bank的值可以是00,01,10,11,这里的指针大小就是10位。则此时可以使用10根地址线也可以使用16根地址线,只不过高位6根就不起作用了,或者可以用于其他的用途。同理这个题目也就是简单的求8192是2的几次方而已,答案是13,当然也可以设计位16根,高位3根可以不用可以参与其他的硬件功能。

因为内存是有编号的,以1Byte为单位,所以8KB=8 * 1024Byte,所以内存的编号是区间[0, 8 * 1024 -1]中的一个元素;
又因为,CPU是通过总线来控制内存的,总线就是一根电线,能传播一个电平信号,高于一定电平时为1,否则记为0,意思就是一根总线能传播的信号总数为2(0和1);
如果一个CPU想通过总线来控制8K的内存编号,则CPU的总线所表示的数的排列组合数要达到8K个;
假设从n个数抽出表示排列组合数可以达到8K个,也就是2的n次方等于 8K, 8K= 8 * 1024 又等于 2的13次方, 所以n等于13;
即得出结果。
好好看书,复习一下高中排列组合的知识。不是计算机你不会,是你数学基础太弱了。
再不会就加群:256924514