学习字节寻址过程中出现的问题

在复习计算机组成原理的时候遇到了一道挺简单的题,但当时琢磨了挺长时间。

在这里插入图片描述

设CPU有20根地址线和16根数据线,求CPU按字节访问的地址范围是多少,CPU按字访问的地址范围是多少。

CPU按字节访问的地址范围是多少。当时觉得这么容易:不就是 2 20 × 16 / 8 = 2 M 2^{20} \times 16 / 8 = 2M 220×16/8=2M嘛,按字访问那就是 2 20 = 1 M 2^{20} = 1M 220=1M,这有什么。当时看答案。

在这里插入图片描述

我想半天没想明白,怎么会是1M呢,上面的算式算了几遍确定没算错,于是搜索了一下,但也没有看明白。

在这里插入图片描述

课本上的相关内容似乎也是一笔带过,没有解释。于是意识到这是因为对定义的错误认识。

按字节寻址

按字节寻址是指地址线所表示的一个地址对应一个字节的位置。而上述题中20根地址线,共能表示 2 20 = 1 M 2^{20}=1M 220=1M的地址,一个地址对应一个字节,所以按字节寻址范围是1M。

按字寻址

由于每个字由多个字节,为了对字节进行定位,需要分出一些地址线用于定位字节,其余的地址线用于地址编号。所以上述题中一个字是两个字节,所以按字访问范围是512K。

区分

我一开始将此处与下面这种情况搞混了,才犯了错误。

在这里插入图片描述

这里规定按字寻址,所以块内地址范围是4,即需要2位地址;Cache地址范围是4K,即需要12位地址;主存地址范围是512K,即需要19位地址。

可以看出其实这两种本来就是一样的,只是从不同方向来推导。第一种是从地址位数来推出地址范围,第二种是已知地址范围来推出地址位数。

从地址位数来推出地址范围,第二种是已知地址范围来推出地址位数。

而一开始我的问题出在:将每根地址线都对应一个字,而每个字再分为两个字节,但是实际上这样做没有考虑到字内寻找字节也需要地址线,这样原来的20根地址线是不够用的,需要21根地址线。问题出在将地址线的根数和寻址地址位数搞混了,地址线不一定全部用于地址编号。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值