1.4 寻址方式
📝 学习目标
- 知道寻址方式解决的问题:操作数在哪里?怎么找到它?
- 能区分“指令地址字段里到底放了什么”
- 掌握软设常考五种:立即、直接、间接、寄存器、寄存器间接
🎯 知识点
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,则该指令的操作数值为:
📚 本课小结
- 立即:指令里放数
- 直接:指令里放地址
- 间接:指令里放“地址的地址”
- 寄存器:寄存器里放数
- 寄存器间接:寄存器里放地址