Appearance
题目
某运算类型指令中有一个地址码为通用寄存器编号,对应通用寄存器中存放的是操作数或操作数地址,CPU 区分两者的依据是( )。
错因
B
"编码方式"指的是数据的二进制表示(如补码、IEEE 754)——这是数据怎么解释的问题,不是数据在哪里的问题。CPU 不会凭"这串位看起来像地址还是像数"来决定操作数位置——电路里没有这种推断能力。
C
寄存器编号决定的是"用哪个寄存器",不决定"寄存器里装的是数还是地址"。同一个寄存器(比如 R3)在不同指令、不同寻址方式下既可能装操作数也可能装地址,编号本身没有这种区分能力。
D
"内容"是被使用的对象,不能反过来决定怎么用它。CPU 在取指令时已经必须知道"接下来要把这个寄存器当数据用还是当地址用"——必须有一个先于内容读取的判定依据,那只能来自指令本身的字段(即寻址方式)。
总解析
核心区别:寄存器寻址 vs 寄存器间接寻址
两种寻址方式都用同一个字段——通用寄存器编号——但语义不同:
| 寻址方式 | 寄存器里存的是 | 取操作数路径 |
|---|---|---|
| 寄存器寻址 | 操作数 | 直接读寄存器 → 拿到操作数 |
| 寄存器间接寻址 | 操作数地址 | 读寄存器 → 拿到地址 → 再访存 → 拿到操作数 |
CPU 怎么知道走哪条路?指令本身有一个寻址方式字段(addressing mode field),译码阶段读出这个字段,就决定了把寄存器里的内容当数据还是当地址。这是指令格式设计时就规定好的——寻址方式决定取数方式。
可以反过来验证 B、C、D 都不通:
- 不能靠数据本身判断(B、D),因为电路在读数据之前就得知道要怎么用它;
- 不能靠寄存器编号判断(C),同一个编号在不同指令里可对应不同寻址方式。
最终答案是 A(操作数的寻址方式)。