Appearance
题目
某计算机主存空间为 4GB,字长为 32 位,按字节编址,采用 32 位定长指令字格式,若指令按字边界对齐存放,则程序计数器 (PC) 和指令寄存器 (IR) 的位数至少分别是( )。
错因
A
PC 算对了 30 位,但 IR 也按 30 位算就错了。IR 装的是"取出的整条指令本身",而本题指令字长是 32 位——IR 必须能完整容纳一条指令,至少 32 位,不能因为"按字对齐"就缩水。把"装地址"和"装指令"混了。
C
把 PC 和 IR 的角色反了:以为 PC 是 32 位、IR 是 30 位。实际刚好相反——PC 因为"按字对齐"省了 2 位(30 位够用),IR 必须装下整条 32 位指令一位都不能省。记忆:PC 装"指针"(可压缩),IR 装"内容"(不能压缩)。
D
PC 算成 32 位(没意识到字对齐能省 2 位低位)。"4GB 主存按字节编址 = 32 位字节地址"是对的;但既然指令必须 4 字节对齐,所有指令地址低 2 位永远是 0,完全可以不存。题目问"至少"——按字对齐场景下 PC 至少 30 位即可。
总解析
第一步:算字节地址位数
主存 4 GB = B,按字节编址,单字节地址需要 32 位。
第二步:判断 PC 至少需要多少位
PC(程序计数器)保存"下一条指令的地址"。
- 指令长 32 位 = 4 字节
- 按"字边界对齐"存放 = 每条指令的起始字节地址必须是 4 的倍数 → 地址末 2 位永远是 00
由于末 2 位是固定值,硬件实现时不必存这 2 位——只需存高 30 位的"字地址",取指时硬件自动在末尾补 00 拼出字节地址。
第三步:判断 IR 至少需要多少位
IR(指令寄存器)保存"刚刚取出的整条指令"。
- 指令字长 32 位 → IR 必须能容纳 32 位完整指令(操作码 + 操作数字段都在里面)
- 这是"指令本身的位数",与地址压缩无关
汇总:PC = 30 位,IR = 32 位。
最终答案是 B(30、32)。
对比表:
| 寄存器 | 装的东西 | 是否能因字对齐压缩 | 至少位数 |
|---|---|---|---|
| PC | 下一条指令的地址(指针) | ✓(地址末 2 位恒 0 可省) | 30 |
| IR | 取出的整条指令(内容) | ✗(指令本身没有"对齐冗余") | 32 |
易错点速查:
- PC 是"指向"指令的指针,所以受地址对齐规则影响(可压缩)
- IR 是"装载"指令的容器,必须容纳完整指令字(不可压缩)
- "至少"意味着按最紧凑设计算,能省的位都省