Appearance
题目
下列存储器中,汇编语言程序员可见的是( )。
Ⅰ. 指令寄存器
Ⅱ. 微指令寄存器
Ⅲ. 基址寄存器
Ⅳ. 标志状态寄存器
错因
A
把 IR 和 MIR 都当成可见。IR 在取指阶段由 CPU 自动加载当前指令,汇编里没有任何指令能直接操作它;MIR 是微程序控制器内部寄存器,连指令集都触及不到。这两个都是"硬件实现细节",对汇编程序员完全透明。
B
漏判了"指令寄存器是否可见"。IR 经常出现在数据通路图里、考点里,容易误以为"这么重要的东西程序员肯定能用"——但实际上 IR 是 CPU 取指阶段的中间存放器,由硬件自动管理。程序员可见 ≠ 硬件中存在:可见的标准是"汇编指令集里能否读 / 写它",IR 不能。
C
把 MIR 当成可见——MIR 是微程序设计的实现机制,仅当前 CPU 设计者用,对外完全屏蔽(不同型号的 CPU 同样的指令集,微指令组成可以完全不同)。Ⅳ 选对了,但 Ⅱ 选错。
总解析
核心判定:"汇编语言程序员可见"等价于该寄存器是否出现在 ISA(指令集架构)里、能否被某条汇编指令直接读 / 写。
逐项判断:
| 编号 | 寄存器 | 可见? | 理由 |
|---|---|---|---|
| Ⅰ | 指令寄存器(IR) | 不可见 | CPU 取指阶段自动加载,无任何汇编指令操作它 |
| Ⅱ | 微指令寄存器(MIR) | 不可见 | 微程序控制器内部部件,是 CPU 实现细节,不在 ISA 中 |
| Ⅲ | 基址寄存器 | 可见 | 用于基址寻址,汇编里 MOV [BX+DISP], AX 这种用法直接读它 |
| Ⅳ | 标志状态寄存器(PSW / FLAGS) | 可见 | 算术指令隐式写、条件跳转 JZ JC 隐式读,部分 ISA 还有显式 PUSHF / POPF |
只有 Ⅲ、Ⅳ 可见。
最终答案是 D(仅Ⅲ、Ⅳ)。
程序员可见 vs 不可见 速查:
| 类别 | 例子 | 程序员可见? |
|---|---|---|
| 通用寄存器 | AX/BX/EAX/RAX、s0~s11、x0~x31 | ✓ |
| 程序计数器 PC | EIP / RIP / pc | ✓(部分 ISA 直接见、部分通过分支间接见) |
| 基址 / 变址寄存器 | BP、SI、DI | ✓ |
| 标志寄存器 PSW / FLAGS | EFLAGS、SR | ✓ |
| 指令寄存器 IR | CPU 取指中间寄存器 | ✗ |
| 微指令寄存器 MIR、控制存储器 CM | 微程序实现细节 | ✗ |
| MAR / MDR | 主存接口寄存器 | ✗(CPU 内部,对外仅暴露 load/store 指令) |
记忆口诀:"用得上的(参与寻址 / 算术结果 / 条件判断)就可见,自动管理的(取指 / 微编码)就不可见"。