Appearance
题目
假设变址寄存器 R 的内容为 1000H,指令中的形式地址为 2000H;地址 1000H 中的内容为 2000H,地址 2000H 中的内容为 3000H,地址 3000H 的内容为 4000H,则变址寻址方式下访问到的操作数是()。
错因
A
把变址寄存器 R 的"内容"当成了操作数。R 是用来参与计算有效地址的(EA = R + 形式地址),它本身的值不是操作数。选 1000H 的人多半误以为"变址寻址 = 取变址寄存器里的数",混淆了"寄存器寻址"和"变址寻址"。
B
把"形式地址"当成了 EA:直接停在指令里写的 2000H,没做加法。变址寻址的关键正是形式地址 + 变址寄存器,停在形式地址等于退回到了"立即寻址"或"直接寻址"的逻辑。也可能是误把 Mem[1000H] = 2000H 当作答案——同样是少做了加法。
C
只算到了有效地址 EA = R + 形式地址 = 1000H + 2000H = 3000H 就停了,没有再做"取内存内容"那一步。变址寻址的最终操作数是 Mem[EA],而不是 EA 本身。把"地址"当成"数据"是寻址题最高频的错点。
总解析
变址寻址公式:
其中 是变址寄存器 R 的内容, 是指令中的形式地址。
两步代入:
| 步骤 | 计算 | 结果 |
|---|---|---|
| ① 求 EA | ||
| ② 取操作数 |
完整访存路径(值的流向):
最终答案是 D(4000H)。
寻址方式速辨(容易混的几种):
| 寻址方式 | 操作数位置 | 公式 |
|---|---|---|
| 立即寻址 | 指令内 | A 本身 |
| 直接寻址 | 内存 | Mem[A] |
| 间接寻址 | 内存(多一次访存) | Mem[Mem[A]] |
| 寄存器寻址 | 寄存器 | (R) |
| 寄存器间接寻址 | 内存 | Mem[(R)] |
| 变址寻址 | 内存 | Mem[(R) + A] |
| 基址寻址 | 内存(语义同变址,B 是基址) | Mem[(B) + A] |
变址寻址记忆要点:先算地址(加法),再访存(取值)——两步都不能漏。