vainquit 2018-06-04 08:51 采纳率: 100%
浏览 3332
已采纳

一根地址线只能传输一个二进制,为什么寻址能力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

  • 写回答

10条回答 默认 最新

  • zxc1093476639 2018-06-04 09:35
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • qq_25863821 2018-06-04 09:24
    关注

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

    评论
  • threenewbee 2018-06-04 09:16
    关注

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

    评论
  • threenewbee 2018-06-04 09:19
    关注

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

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

    评论
  • 乐古 2018-06-04 09:19
    关注

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

    评论
  • 「已注销」 2018-06-04 10:07
    关注

    假设从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。

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

    评论
  • qq_33739136 2018-06-05 01:41
    关注

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

    评论
  • 狗子猴子驴子 2018-06-05 02:10
    关注

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

    评论
  • burnmite 2018-06-15 11:51
    关注

    是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根可以不用可以参与其他的硬件功能。

    评论
  • 「已注销」 2018-06-04 09:58
    关注

    因为内存是有编号的,以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

    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 求苹果推信imessage批量推信技术
  • ¥15 ubuntu 22.04 系统盘空间不足。隐藏的docker空间占用?(相关搜索:移动硬盘|管理系统)
  • ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥15 Stata数据分析请教
  • ¥15 请教如何为VS2022搭建 Debug|win32的openCV环境?
  • ¥15 关于#c++#的问题:c++如何使用websocketpp实现websocket接口调用,求示例代码和相关资料