← 返回计算机组成原理目录
计算机组成原理指令系统#530

寻址方式

837
目录 · 8 个章节

定义

寻址方式解决的核心问题:如何由指令中的地址码字段 AA 找到有效地址 EAEA,进而找到操作数 SS

符号含义
AA指令中的地址码字段
EAEA有效地址,实际访问内存的地址
SS操作数,参与运算的数据

地址码 AA 不一定是最终操作数地址——它可能是立即数、寄存器编号、内存地址,或需与寄存器相加才能得到 EAEA

五种基础寻址方式

寻址方式公式关键理解
立即寻址S=AS = AAA 本身就是操作数,不访存
直接寻址EA=A, S=M[EA]EA = A,\ S = M[EA]AA 就是内存地址
间接寻址EA=M[A], S=M[EA]EA = M[A],\ S = M[EA]AA 指向"地址的地址",至少两次访存
寄存器寻址S=R[A]S = R[A]操作数在寄存器中
寄存器间接寻址EA=R[A], S=M[EA]EA = R[A],\ S = M[EA]寄存器里存内存地址

特点速记:立即最快但不灵活;直接简单但受限于地址字段位数;间接扩大范围但慢;寄存器快但数量有限;寄存器间接兼顾速度与寻址范围。

基址、变址、相对寻址

统一形式:EA=基准+偏移EA = \text{基准} + \text{偏移}

地址码 AA 不再被当作完整地址,而是偏移量。

寻址方式公式核心用途
基址寻址EA=BR+AEA = BR + A程序重定位(BRBR 固定,AA 可变)
变址寻址EA=A+IXEA = A + IX数组遍历(AA 固定,IXIX 可变)
相对寻址EA=PC+AEA = PC + A跳转与分支

记忆口诀:BR+ABR + A → 程序搬家;A+IXA + IX → 数组遍历;PC+APC + A → 指令跳转。

易混点

立即寻址 vs 直接寻址

立即寻址取的是 AA 本身;直接寻址取的是 M[A]M[A]MOV R1, #100 vs MOV R1, 100

寄存器寻址 vs 寄存器间接寻址

R2R_2 是寄存器内容本身;M[R2]M[R_2] 是以寄存器内容为地址访问内存。

基址寻址 vs 变址寻址

公式形似但思想不同:基址寻址是"程序整体搬家",变址寻址是"数组元素逐个访问"。判断标准:固定的是谁——固定的是基址寄存器则为基址寻址,固定的是形式地址则为变址寻址。

相对寻址的 PC 陷阱
CPU 取完当前指令后,

考点

  • 八种寻址方式公式必须默写:立即 S=AS=A、直接 EA=AEA=A、间接 EA=M[A]EA=M[A]、寄存器 S=R[A]S=R[A]、寄存器间接 EA=R[A]EA=R[A]、基址 EA=BR+AEA=BR+A、变址 EA=A+IXEA=A+IX、相对 EA=PC+AEA=PC+A
  • 间接寻址至少两次访存,速度最慢;立即寻址最快,但操作数大小受地址字段位数限制。
  • 基址 vs 变址的区分关键:看"固定基准"是 BRBR(基址寻址)还是 AA(变址寻址)。
  • 相对寻址计算必先确认取指后 PCPC 的值,不能直接用当前指令地址加偏移。
  • 给定 AA 和内存/寄存器内容,能逐级求出 EAEASS(如 A=100A=100M[100]=500M[100]=500M[500]=20M[500]=20:直接寻址得 500500,间接寻址得 2020)。

讨论

0 条评论

登录后参与讨论

登录后可以发布评论、回复和点赞。

暂无评论。

x1a0Y4NGren's Blog

一个计算机学生的学习记录、算法题解与个人知识管理。

RSS