Skip to content
难度中等(★★)
建议时长60分钟
本课难点
  • 立即寻址(放数)与直接寻址(放地址)的高频混淆点
  • 间接寻址“地址的地址”带来的两次访存理解
  • 寄存器寻址 vs 寄存器间接(寄存器里放数 vs 放地址)

1.4 寻址方式

本课核心知识点手绘速记(SVG)

📝 学习目标

  • 知道寻址方式解决的问题:操作数在哪里?怎么找到它?
  • 能区分“指令地址字段里到底放了什么”
  • 掌握软设常考五种:立即、直接、间接、寄存器、寄存器间接

🎯 知识点

1) 指令的基本格式

机器指令通常包含:

  • 操作码(OP):做什么(加/减/取数/跳转...)
  • 地址码字段:操作数本身或操作数地址

一条指令可有 0/1/2/3 地址(零地址/单地址/双地址/三地址)。软设更关注“地址字段含义”。

2) 常见寻址方式(按题干描述对号入座)

寻址方式指令中放什么访存次数(概念理解)特点关键词
立即寻址(Immediate)操作数本身0速度快、灵活性差(改常量要改指令)
直接寻址(Direct)操作数的直接地址1简单直观
间接寻址(Indirect)操作数的间接地址(指向一个单元,该单元里放真正地址)2灵活性强,但慢
寄存器寻址(Register)寄存器编号(寄存器里放操作数)0(不访存)快,常见于 RISC
寄存器间接(Register Indirect)寄存器编号(寄存器里放操作数地址)1折中、常用于指针

课堂强调:

  • 立即寻址 vs 直接寻址 最容易混。
    • 立即:放“数”
    • 直接:放“地址”

3) 隐含寻址(了解)

有些指令默认操作数寄存器(如 AC),指令里不显式写出来,称为隐含寻址。课堂提到软设目前不太考。

🧠 难点与易错点

  • 易错1:把“操作数地址”看成“操作数本身”
  • 易错2:把“间接地址”误以为“直接地址”
  • 易错3:把“寄存器寻址”和“寄存器间接寻址”混
    • 寄存器里放“数” → 寄存器寻址
    • 寄存器里放“地址” → 寄存器间接

🔑 关键词解释

  • 操作数(operand):参与运算的数据。
  • 地址字段(address field):指令里用来定位操作数的信息。
  • 访存(memory access):访问主存一次。

🔍 联想扩展(与 CISC/RISC 高频联动)

  • CISC:寻址方式多样,指令功能强
  • RISC:多寄存器寻址,load/store 架构,利于流水线

🧪 例题(按难度)

简单(3题)

单选
在“立即寻址”中,若不考虑取指本身,获取操作数需要访问主存的次数为:
单选
若题干强调“需要两次访存才能得到操作数”,最可能的寻址方式是:
单选
指令给出寄存器编号,且寄存器中存放的是“操作数本身”,这种方式是:

中级(3题)

例题1(最经典的描述题)

机器指令的地址字段中直接指出操作数本身的寻址方式是:

单选
选择正确寻址方式:

例题2(直接 vs 间接)

若指令地址字段给出的是操作数的间接地址(需要两次寻址才能得到操作数),则属于:

单选
选择正确寻址方式:

例题3(寄存器 vs 寄存器间接)

若指令中给出寄存器 R1,且 R1 中存放的是操作数地址,则属于:

单选
选择正确寻址方式:

困难(1题)

填空
已知:`M[100]=200`,`M[200]=5`。某指令采用 **间接寻址**,其地址字段为 100,则该指令的操作数值为:

📚 本课小结

  • 立即:指令里放数
  • 直接:指令里放地址
  • 间接:指令里放“地址的地址”
  • 寄存器:寄存器里放数
  • 寄存器间接:寄存器里放地址