系统架构师学习小课堂第2课之每日刷题
样题分析:
内存地址从 AC000H 到 C7FFFH,则共有 C7FFFFH-AC000H=1BFFFH(还需要+1) 个 地址单元(转换为十进制后,为 112KB)。如果该内存地址按字(16bit)编址,则共有 112KB*16 位(容量)。假设该内存由 28 片存储器芯片构成,已知构成此内存的芯片每片有 16KB 个存 储单元,则该芯片每个存储单元存储(112KB*16)/(28*16KB)=4 位。
解析:
1. 计算内存地址范围
内存的地址范围从 AC000H
到 C7FFFH
。这个范围包括两个地址:
AC000H
表示起始地址(16进制)。C7FFFH
表示结束地址(16进制)。
现在我们来计算地址的范围:
首先将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
计算地址范围的大小:
复制代码
地址范围 = C7FFFH - AC000H = 13107184 - 11272192 = 1834992(十进制)
加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. 总结
- 内存地址范围从
AC000H
到C7FFFH
共有 1146880 个地址单元,折合成 112KB 的内存容量。 - 按字(16 位)编址的情况下,总容量是 1792000 位。
- 这块内存由 28 片16KB芯片构成,每个存储单元存储 4 位数据。
这个过程详细解释了如何计算内存容量、每片芯片的存储单元以及每个单元存储的数据量。