Appearance
题目
某计算机存储器按字节编址,主存地址空间大小为 64MB,现用 4M×8 位的 RAM 芯片组成 32MB 的主存储器,则存储器地址寄存器 MAR 的位数至少是( )。
错因
A
只看到题面的 "4M×8 位" 就直接算 位。这只是单片芯片的内部地址位数,不是 MAR 位数。MAR 要寻址的是整个主存地址空间,远大于单芯片容量。
B
在 A 的基础上多加了 1 位(22 + 1 = 23),可能是想"加一位选片",但片选位数算错了——32MB 需要 片,片选要 3 位(),不是 1 位。即便用这条路径算,也应得 22 + 3 = 25(即选项 C),仍然不是答案。
C
按"实际 RAM 容量 32MB"算: 位。这是把题目读漏了——题目明确说主存地址空间是 64MB,要求"主存芯片占满所有可能存储地址空间"。即便当前只装了 32MB RAM,CPU 给出的地址范围仍然要覆盖完整的 64MB 地址空间(剩下 32MB 留给 ROM 或预留),所以 MAR 必须按 64MB 来配。
总解析
关键概念辨析:MAR 的位数由"地址总线宽度 / 主存地址空间"决定,而不是"实际安装的 RAM 容量"。
题目里有三个容量数字,要分清:
| 数据 | 含义 | 与 MAR 的关系 |
|---|---|---|
| 4M×8 位 | 单片芯片容量 | 决定片内地址位数 = 位 |
| 32MB | 实际安装 RAM 容量 | 决定 RAM 区占多大地址段 = 位 |
| 64MB | 主存地址空间(CPU 能寻址的总范围) | 决定 MAR 位数 = = 26 位 |
计算:
按字节编址 → MAR 至少需要 位。
为什么 MAR 要按地址空间而不是按 RAM 容量配?
主存地址空间常被划分为多个区(RAM 区、ROM 区、I/O 映射区、保留区)——题目里 32MB 是 RAM,剩下 32MB 通常是 ROM 或保留地址。CPU 的 MAR 要能产生整个 64MB 范围内任意有效地址,否则地址译码电路无法正确选中各个区。
换个角度想:MAR 是"CPU 能往地址总线上发的最大值"决定的,与"地址总线下游真正接了多少存储器"无关。
最终答案是 D(26 位)。