Skip to content

2010年 408 计算机组成原理 第 18 题

计算机组成原理2010年选择题2分

题目

下列寄存器中,汇编语言程序员可见的是( )。

错因

A

把 MAR 误当成"地址类寄存器、程序员能用"。但 MAR 是 CPU 内部用来驱动地址总线的临时寄存器——每次访存时由控制器自动装入要访问的地址,汇编里没有任何指令可以读写 MAR。它对程序员完全透明。

C

误以为"既然能 mov 数据,那总要有个数据寄存器可见"。但 MDR 也是访存周期里 CPU 自动使用的中转寄存器,和指令集毫无对应关系——汇编看到的"数据"是通用寄存器(如 EAX、R1)和内存操作数,看不到 MDR 这一中间环节。

D

把 IR 当成"装指令的寄存器,调试时能看到"——确实在调试器里可能显示当前指令,但那是工具帮你解码的视图。IR 由取指阶段硬件自动装载,汇编指令集里没有针对 IR 的读写指令,对程序员透明。

总解析

"程序员可见"的判定:在汇编指令集(ISA)里有指令能直接读写这个寄存器,或这个寄存器的状态会通过指令的副作用改变——这才叫可见。否则它就是 CPU 内部实现细节,对程序员透明。

逐项分析

寄存器可见?原因
A. MAR访存周期内部用,控制器自动装入,无任何 ISA 指令可访问
B. PC跳转/分支/调用/返回指令都修改 PC(jmpcallret、条件分支)
C. MDR访存数据中转,自动驱动数据总线,对 ISA 透明
D. IR取指阶段硬件自动装载当前指令,无指令读写 IR

为什么 PC 可见?任何控制流指令(无条件跳转、条件分支、函数调用、返回)本质都是"修改 PC"。即使 ISA 里没有名为 MOV PC, ... 的指令(有些 RISC 也确实有),跳转/调用类指令的语义就是写 PC——这就是"程序员能感知/控制 PC"的最直接证据。

"可见 vs 透明"分类速查

程序员可见(ISA 一部分)程序员透明(实现细节)
PC(程序计数器)MAR / MDR(访存中转)
通用寄存器(GPRs,如 R0–R31)IR(指令寄存器)
程序状态字(PSW / FLAGS)微指令寄存器、流水线段间锁存器
栈指针(SP)、基址寄存器等TLB、Cache 行

最终答案是 B(程序计数器 PC)

记忆要点:判定一个寄存器是否程序员可见,问自己:汇编里有没有指令可以直接读它、写它,或者间接改变它? PC 可以(跳转类指令);MAR/MDR/IR 都不行——它们是 CPU 取指/访存"内部脚手架"。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题