Skip to content

数据寻址方式

考情分析

寻址方式是每年 408 必考知识点,选择题和大题均有涉及。重点在于 EA 的计算公式和访存次数,尤其是间接寻址、基址/变址寻址的区别。

寻址方式总览

寻址方式有效地址 EA取操作数访存次数特点
立即寻址操作数就是指令中的数本身0最快,操作数在指令中
直接寻址EA = A1简单,A 是内存地址
间接寻址EA = (A)2(一次取地址,一次取数)灵活,支持数组/指针
寄存器寻址操作数在寄存器中0(不访存)最快访问,寄存器有限
寄存器间接寻址EA = (R)1寄存器存地址,灵活
相对寻址EA = (PC) + A1与位置无关,适合跳转
基址寻址EA = (B) + A1B 由操作系统设置,程序重定位
变址寻址EA = (X) + A1X 由程序员修改,适合循环/数组

注:A 是指令中的地址字段,(X) 表示寄存器 X 的内容。

各寻址方式详解

立即寻址

指令中直接包含操作数,而不是操作数的地址。

指令: ADD R0, #5    ; 将立即数 5 加到 R0

操作数 = 指令中的立即数字段,无需访存取操作数。但立即数的位宽受指令字长限制。

直接寻址

指令中的地址字段 A 就是操作数所在的主存地址。

EA=A

访存 1 次即可取到操作数。地址空间受 A 的位数限制。

间接寻址

指令中的 A 不是操作数地址,而是存放操作数地址的内存单元地址。

EA=(A)

需要访存 2 次:第 1 次从地址 A 取出真正的操作数地址,第 2 次才取操作数。

多重间接寻址:(A) 中存的还是间接地址,继续间接,每多一层多访存 1 次。

寄存器寻址

操作数在某个寄存器中,指令指定寄存器编号。

操作数=Ri

不访存,速度最快。但寄存器数量有限(一般 8~32 个)。

寄存器间接寻址

寄存器中存的是操作数的内存地址。

EA=(Ri)

访存 1 次取操作数(地址在寄存器中,比直接寻址少一次主存地址读取)。

相对寻址

程序计数器 PC 的当前值为基准,加上偏移量 A

EA=(PC)+A

注意:取该指令时 PC 已自动加 1(指向下一条),所以 EA = 下一条指令地址 + A。

特点:指令中存储的是相对偏移而非绝对地址,程序可以加载到任意内存位置而不改变相对跳转(位置无关代码)。条件跳转指令广泛使用。

基址寻址

基址寄存器 B(Base Register)的内容为基准,加上偏移量 A(偏移量在指令中,固定不变)。

EA=(B)+A
  • 基址寄存器由操作系统设置,用于程序重定位(多道程序)
  • 偏移量 A 较小,基址寄存器覆盖程序起始地址
  • 程序中的 A 是相对程序起始的偏移,基址 B 是实际起始地址

变址寻址

变址寄存器 X(Index Register)的内容为基准,加上固定偏移量 A

EA=(X)+A
  • 变址寄存器由程序员控制,可以在循环中自动增减
  • A 是数组/表格的起始地址(固定),X 是下标(变化的)
  • 适合遍历数组、查表等顺序访问

基址与变址的区别

特性基址寻址变址寻址
哪个变化A 固定,B 由 OS 设置A 固定,X 由程序员修改
用途程序重定位数组遍历、循环
修改者操作系统程序员

堆栈寻址

操作数隐含在栈顶,通过栈指针 SP 访问。

  • PUSH X:SP-1 → SP,然后将 X 写入 M[SP](先移指针再压栈,或反之取决于架构)
  • POP X:将 M[SP] 读出送 X,然后 SP+1 → SP

堆栈操作的操作数地址由 SP 隐含给出,无需在指令中显式指定。零地址指令(如 ADD)就是基于堆栈寻址:从栈顶弹出两个操作数运算后结果压回栈顶。

交互可视化

加载可视化中...

访存次数汇总

寻址方式取指令访存取操作数访存总计
立即101
寄存器101
直接112
寄存器间接112
相对112
基址112
变址112
间接123

考点清单

  • 立即寻址:操作数在指令中,访存 0 次取操作数
  • 间接寻址:访存 2 次(取地址 + 取数据),比直接多 1 次
  • 基址寻址:OS 设置基址,用于重定位;变址寻址:程序员设置,用于遍历
  • 相对寻址:EA = PC + 偏移,PC 已指向下一条指令
  • 寄存器间接 EA = (Ri),只访存 1 次(地址已在寄存器中)

真题练习

相关真题(14题)

2026Q43综合题10分

指令格式设计与寻址方式综合题

2023Q17选择题2分

CPU区分操作数与地址的依据

2020Q16选择题2分

定长指令字中直接寻址范围计算

2019Q15选择题2分

基址寻址与大端存储下的地址计算

2019Q45综合题16分

递归函数的机器级表示与栈帧分析综合题

2018Q18选择题2分

变址寻址中变址寄存器内容的计算

2017Q15选择题2分

数组元素访问适用的寻址方式

2016Q17选择题2分

变址间接寻址的有效地址计算

2014Q17选择题2分

定长指令字中偏移量字段的取值范围

2014Q44综合题12分

循环程序的指令序列与流水线执行分析综合题

2013Q17选择题2分

变址寻址操作数的获取

2011Q16选择题2分

偏移寻址方式的分类

2010Q43综合题11分

指令格式设计与寻址方式综合题

2009Q16选择题2分

相对寻址中PC值与目标地址的计算