系统架构师学习小课堂第2课之每日刷题

样题分析:

内存地址从 AC000H 到 C7FFFH,则共有 C7FFFFH-AC000H=1BFFFH(还需要+1) 个 地址单元(转换为十进制后,为 112KB)。如果该内存地址按字(16bit)编址,则共有 112KB*16 位(容量)。假设该内存由 28 片存储器芯片构成,已知构成此内存的芯片每片有 16KB 个存 储单元,则该芯片每个存储单元存储(112KB*16)/(28*16KB)=4 位。

解析:

1. 计算内存地址范围

内存的地址范围从 AC000HC7FFFH。这个范围包括两个地址:

  • AC000H 表示起始地址(16进制)。
  • C7FFFH 表示结束地址(16进制)。

现在我们来计算地址的范围:

  1. 首先将16进制的起始和结束地址转换为10进制。

    • AC000H 转换为10进制是 11272192。  

      AC000H = A * 16^5 + C * 16^4 + 0 * 16^3 + 0 * 16^2 + 0 * 16^1 

    • C7FFFH 转换为10进制是 13107184。

    • C7FFFH = C * 16^5 + 7 * 16^4 + F * 16^3 + F * 16^2 + F * 16^1 =12*1048576+7*65536+15*4096+15*256+15*16=13107184

  2. 计算地址范围的大小:

    复制代码

    地址范围 = C7FFFH - AC000H = 13107184 - 11272192  = 1834992(十进制)

  3. 加1来计算包含的所有地址单元:

    复制代码

    地址单元总数 = 1834992 + 1 = 1834993

这个值表示地址范围内共有 1834993 个地址单元。

2. 将地址单元转换为字节

我们已经知道有 1834993 个地址单元,每个地址单元代表一个字节(8 位),但问题说明中按(16 位)编址,也就是说每两个地址单元构成一个字。

因此,按字计算的地址单元数量为:

复制代码

共有字的数量 = 1834993 / 2 = 917496.5

字节数为:

yaml

复制代码

内存容量 = 573440 * 2 字节 = 1146880 字节 = 1120 KB

但是根据题目中给出的近似值,它被四舍五入为112 KB

3. 计算总位数

题目中指出按**字(16 位)**编址,因此每个字有16位。

总位数为:

yaml

复制代码

总位数 = 1120 KB * 1024 字节/KB * 8 位/字节 = 1146880 字节 * 8 = 9175040 位

总容量按字计算是:

yaml

复制代码

总容量 = 1120 KB * 16 位/字 = 1792000 位

4. 存储器芯片的构成

假设内存由 28 片存储芯片构成,每片芯片有16KB的存储单元。每个存储单元存储的信息量需要计算。

每片存储芯片有 16 KB 个存储单元,1KB = 1024 字节,所以每片芯片的存储单元数量是:

yaml

复制代码

每片芯片的存储单元 = 16 * 1024 = 16384 个单元

28 片芯片的总存储单元为:

复制代码

总存储单元 = 28 * 16384 = 458752 个单元

每个存储单元能存储的位数为:

复制代码

每个存储单元存储的位数 = 总位数 / 总存储单元 = 1792000 位 / 458752 = 3.91 ≈ 4 位

因此,每个存储单元大约可以存储4位。

5. 总结

  • 内存地址范围从 AC000HC7FFFH 共有 1146880 个地址单元,折合成 112KB 的内存容量。
  • 按字(16 位)编址的情况下,总容量是 1792000 位。
  • 这块内存由 28 片16KB芯片构成,每个存储单元存储 4 位数据。

这个过程详细解释了如何计算内存容量、每片芯片的存储单元以及每个单元存储的数据量。


系统架构师学习小课堂第2课之每日刷题
http://wizhiai.github.io/p/ad65972d81ee4a85a0685d034c469f09/
作者
胡礼节
发布于
2024年9月20日
许可协议