Appearance
题目
某机器字长 16 位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节 PC 自动加 1。若某转移指令所在主存地址为 2000H,相对位移量字段的内容为 06H,则该转移指令成功转移后的目标地址是()。
错因
A
直接用指令首地址 + 位移量 = 2000H + 06H = 2006H,忽略了"PC 在取指过程中已经增量"这件事。相对寻址的基准从来不是"指令所在地址",而是"PC 当前值"——而 CPU 取完整条指令后,PC 已经指向下一条指令的首地址。
B
只算了一次 PC+1:2000H + 1 + 06H = 2007H。这暴露了对题面"每取一个字节 PC 自动加 1"的理解不完整——转移指令有 2 个字节,必须取 2 次,所以 PC 自动 +1 也要发生 2 次,最终 PC = 2002H 才对。
D
PC 多算了 1 次:2000H + 3 + 06H = 2009H。可能是把"指令长度 2 字节"和"PC 又前进 1"叠加,或者机械地认为"PC 还要再 +1 才能到下一条指令"。本题指令只 2 个字节,PC 只增量 2 次,多算第 3 次没有依据。
总解析
核心规则:相对寻址的目标地址公式是
其中 是取完当前指令后的 PC 值——也就是指向下一条指令首地址的那个 PC,不是指令的起始地址。
第一步:模拟取指过程中 PC 的变化
| 时刻 | 动作 | PC 值 |
|---|---|---|
| 取指开始 | — | (指向操作码字节) |
| 取第 1 字节(操作码) | PC 自动 +1 | |
| 取第 2 字节(位移量) | PC 自动 +1 | (指向下一条指令) |
转移指令共 2 字节,取完后 。
第二步:代入相对寻址公式
最终答案是 C(2008H)。
易错点速记:
- 相对寻址的基准是"取完指令后的 PC",不是"指令起始地址"
- PC 的增量次数 = 指令字节数(本题指令 2 字节,PC 增 2 次)
- 一句话记住:目标地址 = 指令首地址 + 指令长度 + 位移量