Appearance
题目
假定用若干个 2K×4 位的芯片组成一个 8K×8 位的存储器,则地址 0B1FH 所在芯片的最小地址是( )。
错因
A
把"芯片的最小地址"误读成"整个存储器的最小地址",机械答了 0000H。但题目问的是 0B1FH 所在那一片的起始地址——0B1FH 已经过了第 0 组(0x0000–0x07FF),不可能落到 0x0000。
B
可能误把"地址 0B1FH"直接拿来减去某个常数算出 0x0600,或把 0B1FH 错记成 0x0BFF 之类的边界值。0x0600 落在第 0 组(0x0000–0x07FF)范围内,根本就不是 0B1FH 所在组的起始地址。
C
把"片选边界"算成 2K 字 = 0x800,但记成 0x700——可能把 11 位片内地址错按 10 位(0x400 边界)甚至 0x100 边界来切。十六进制下 2K = 0x800,组的起始一定是 0x000、0x800、0x1000、0x1800——0x0700 不可能是组起始。
总解析
第一步:算扩展规模
| 维度 | 数值 |
|---|---|
| 单片容量 | 2K × 4 位 |
| 目标存储器 | 8K × 8 位 |
| 字方向扩展倍数 | 8K / 2K = 4 组(地址空间分成 4 段) |
| 位方向扩展倍数 | 8 / 4 = 每组 2 片拼接 |
| 总芯片数 | 4 × 2 = 8 片 |
第二步:地址位划分
8K = → 总地址 13 位。其中:
- 高 2 位 [12:11]:组号(4 组需 2 位 → 00 / 01 / 10 / 11)
- 低 11 位 [10:0]:片内地址(2K = )
第三步:定位 0B1FH 所在组
0B1FH = 0 1011 0001 1111(16 位),取低 13 位 = 0_1011_0001_1111。
| 位 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 值 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
- 组号 = bit[12:11] = 01 → 第 1 组(编号从 0 开始:0 / 1 / 2 / 3)
- 片内地址 = bit[10:0] =
011 0001 1111
第四步:求该组的最小地址
第 1 组对应地址范围:bit[12:11] = 01 固定,bit[10:0] 从 0 到 。
- 最小地址:bit[12:11]=01, bit[10:0]=0 →
0_1000_0000_0000= 0x0800
也可直接套口诀:4 组的起始分别是 0x0000、0x0800、0x1000、0x1800,0B1FH 落在 [0x0800, 0x0FFF] → 起始 0x0800。
地址范围速查表:
| 组号 | 起始 | 结束 |
|---|---|---|
| 0 | 0x0000 | 0x07FF |
| 1 | 0x0800 | 0x0FFF ← 0B1FH 在此组 |
| 2 | 0x1000 | 0x17FF |
| 3 | 0x1800 | 0x1FFF |
最终答案是 D(0800H)。
易错提醒:
- 字位同时扩展时,组号位数 = ,不要把位方向扩展也算进选片
- 16 进制下"2K = 0x800"是高频边界,记牢能秒解此类题