Skip to content

寻址方式计算实战

考情分析

寻址计算题常以选择题+填空题的形式出现,给定寄存器/内存值,求有效地址或最终操作数。复合寻址(基址+变址、先变址后间接等)是大题中的难点。

基础计算:EA 公式速查

寻址方式EA 或操作数来源
立即操作数 = A(指令中的数值)
直接EA = A
间接EA = Mem[A]
寄存器操作数 = Ri
寄存器间接EA = Ri
相对EA = PC + A
基址EA = BR + A
变址EA = IX + A

例题一:单一寻址方式

已知:PC = 1000H,R1 = 2000H,R2 = 3000H,A(指令地址字段) = 0050H 内存:Mem[1050H] = 4000H,Mem[2000H] = 5000H,Mem[3050H] = 6000H

寻址方式EA 计算操作数
立即0050H
直接EA = 0050HMem[0050H]
间接EA = Mem[0050H]Mem[Mem[0050H]]
寄存器(R1)R1 = 2000H
寄存器间接(R1)EA = 2000HMem[2000H] = 5000H
相对EA = 1000H + 0050H = 1050HMem[1050H] = 4000H
基址(BR=R1=2000H)EA = 2000H + 0050H = 2050HMem[2050H]
变址(IX=R2=3000H)EA = 3000H + 0050H = 3050HMem[3050H] = 6000H

注意:相对寻址 PC 已自动加 1(指向下一条),实际题目中要看 PC 是否已更新。

例题二:间接寻址多层

已知:A = 100H,Mem[100H] = 200H,Mem[200H] = 300H,Mem[300H] = 42H

层数EA操作数
直接100HMem[100H] = 200H
一重间接Mem[100H] = 200HMem[200H] = 300H
二重间接Mem[200H] = 300HMem[300H] = 42H

每多一层间接,多访存 1 次。

例题三:复合寻址(基址 + 变址)

部分机器支持基址和变址叠加:

EA=BR+IX+A

已知:BR = 1000H,IX = 0100H,A = 0020H

EA=1000H+0100H+0020H=1120H

操作数为 Mem[1120H]。

这种方式在访问二维数组时很有用:BR 指向数组起始,IX 是行偏移,A 是列偏移。

例题四:先变址后间接 vs 先间接后变址

两种顺序结果不同:

先变址后间接(Pre-Indexed Indirect):

EA=Mem[(IX)+A]
  1. 先计算 IX+A(变址),得到一个中间地址
  2. 再对该地址间接寻址,取出最终有效地址

先间接后变址(Post-Indexed Indirect):

EA=Mem[A]+IX
  1. 先从地址 A 间接取出基地址
  2. 再加上 IX 偏移(变址)得到最终有效地址

:IX = 0004H,A = 200H,Mem[200H] = 1000H,Mem[204H] = 2000H

先间接后变址:EA = Mem[200H] + 4 = 1000H + 4 = 1004H

先变址后间接:EA = Mem[200H + 4] = Mem[204H] = 2000H

两种结果完全不同,在实际语言中对应 C 的 *(p + i)*(p) + i 的区别。

例题五:真题风格综合题

:16 位机,指令格式如下:

[4位操作码 | 2位寻址特征 | 10位地址/立即数 A]

寻址特征:00=立即,01=直接,10=寄存器间接(A 为寄存器编号),11=相对

设当前 PC = 1000H(取出本条指令后已自动 +1 指向 1001H), R3 = 0500H,A = 0100H,Mem[0100H] = 0200H。

各寻址方式下的操作数:

寻址特征方式操作数
00立即0100H
01直接Mem[0100H] = 0200H
10寄存器间接(R3)Mem[R3] = Mem[0500H]
11相对Mem[PC + A] = Mem[1001H + 0100H] = Mem[1101H]

取操作数完整流程

指令中的地址字段 A
    ↓(根据寻址特征)
计算有效地址 EA(可能经过多次变换)

访问存储器或寄存器

得到操作数

关键点:操作数可能在指令中(立即)、寄存器中(寄存器寻址)或存储器中(其余方式)。

考点清单

  • 先算 EA,再从 EA 取操作数(分两步,别混淆)
  • 相对寻址:EA = PC + A,PC 是取指后的值(已自动加 1 或加指令字节数)
  • 间接寻址每多一重多访存 1 次
  • 基址由 OS 设置(不可随意修改),变址由程序员控制(循环中递增)
  • 复合寻址:基址 + 变址 + 偏移,常用于二维数组访问
  • 先变址后间接 ≠ 先间接后变址,注意顺序