适合读者:软考中级备考同学
阅读时间:3.5分钟
内容:常见寻址方式、特点、对比、例题
1. 什么是寻址方式?
指令中需要指明操作数在哪里。寻址方式就是确定操作数地址的方法。不同的寻址方式影响指令的长度、执行速度和编程灵活性。
软考中常考查各种寻址方式的定义、特点以及它们之间的区别。
2. 常见寻址方式一览
| 寻址方式 | 操作数所在位置 | 指令中给出内容 |
|---|---|---|
| 立即寻址 | 指令本身 | 操作数值 |
| 直接寻址 | 内存单元 | 内存地址 |
| 间接寻址 | 内存单元(地址由指令指向的单元再指向) | 地址的地址 |
| 寄存器寻址 | 寄存器 | 寄存器编号 |
| 寄存器间接寻址 | 内存单元(地址在寄存器中) | 寄存器编号 |
| 变址寻址 | 内存单元(基址+变址) | 基址/变址寄存器编号 + 偏移量 |
| 相对寻址 | 内存单元(PC + 偏移量) | 偏移量 |
下面逐一说明。
3. 详细解释
3.1 立即寻址
- 特点:操作数直接写在指令中
- 优点:不需要访问内存获取操作数,速度快
- 缺点:操作数是固定的,无法动态改变;数值范围受指令字段长度限制
- 示例 :
ADD R0, #5表示将 R0 的值加上立即数 5
3.2 直接寻址
- 特点:指令中给出操作数的内存地址
- 优点:只需一次内存访问即可得到操作数
- 缺点:地址字段长度限制了寻址范围
- 示例 :
LOAD R0, 1000表示将内存地址 1000 中的值加载到 R0
3.3 间接寻址
- 特点:指令中给出的地址单元里存放的是操作数的真正地址(地址的地址)
- 优点:可访问更大的地址空间(因为地址可以放在多个字中)
- 缺点:需要两次内存访问,速度慢
- 示例:指令给出地址 A,内存 A 处存放地址 B,实际操作数在地址 B 中
3.4 寄存器寻址
- 特点:操作数在寄存器中
- 优点:速度快(寄存器访问远快于内存),指令短
- 缺点:寄存器数量有限
- 示例 :
ADD R0, R1表示将 R0 与 R1 的值相加
3.5 寄存器间接寻址
- 特点:指令给出寄存器编号,该寄存器中存放操作数的内存地址
- 优点:地址可动态修改(改变寄存器的值即可),比间接寻址快(只有一次内存访问)
- 示例 :
LOAD R0, (R1)表示以 R1 的内容作为内存地址,取出该地址的值存入 R0
3.6 变址寻址
- 特点:有效地址 = 基址(存放在基址寄存器或指令中) + 变址(存放在变址寄存器中)
- 优点:适合数组访问、循环操作(只需修改变址寄存器即可遍历数组)
- 常见变种:基址寻址(与变址类似,但变址通常用于偏移,基址用于起始地址)
- 示例 :
LOAD R0, 100(R1)表示有效地址 = 100 + R1 的内容
3.7 相对寻址
- 特点:有效地址 = 程序计数器 PC + 偏移量(偏移量通常由指令给出)
- 优点:实现程序浮动(代码在内存中移动仍能正确跳转)
- 用途:主要用于转移指令(条件跳转、无条件跳转)
- 示例 :
BEQ 8表示如果相等,则跳转到 PC + 8 的位置
4. 对比总结表
| 寻址方式 | 地址计算 | 访问内存次数 | 速度 | 编程灵活性 |
|---|---|---|---|---|
| 立即 | 无(操作数在指令中) | 0 | 最快 | 低 |
| 直接 | 地址 = 指令中的地址 | 1 | 快 | 中 |
| 间接 | 地址 = 指令中的地址 | 2 | 慢 | 高 |
| 寄存器 | 操作数在寄存器中 | 0 | 最快 | 中 |
| 寄存器间接 | 地址 = 寄存器内容 | 1 | 快 | 高 |
| 变址 | 地址 = 基址 + 变址 | 1 | 快 | 高(适合数组) |
| 相对 | 地址 = PC + 偏移量 | 1 | 快 | 中(适合跳转) |
访问内存次数指获取操作数所需的额外内存访问(指令本身不算)。
5. 典型考题与例题
题目1 :指令 MOV R0, #100 中,操作数 100 的寻址方式是( )。
A. 立即寻址 B. 直接寻址 C. 寄存器寻址 D. 变址寻址
答案 :A(立即寻址的标志是 # 或直接写数值)
题目2 :若指令中给出的是操作数所在的寄存器编号,这种寻址方式称为( )。
A. 直接寻址 B. 寄存器寻址 C. 寄存器间接寻址 D. 立即寻址
答案:B
题目3 :在变址寻址中,有效地址是通过( )计算得到的。
A. 指令中的地址码 B. 基址寄存器内容 + 变址寄存器内容
C. 程序计数器 + 偏移量 D. 指令中的地址码 + 变址寄存器内容
答案:D(有些教材定义变址为"指令中的地址 + 变址寄存器",基址寻址则用基址寄存器)
注意:不同教材对"变址"和"基址"的称谓可能略有区别,软考通常认为变址寻址中指令给出一个基值(或基址寄存器),再加上变址寄存器。遇到具体题目按照常用定义判断。
题目4 :相对寻址通常用于( )。
A. 数据存取 B. 数组访问 C. 程序跳转 D. 堆栈操作
答案:C
6. 记忆口诀
立即数就在指令中,直接地址直接访存。
间接再访一次存,寄存器最快不用等。
寄存器间接先找址,变址基址加变址。
相对寻址 PC 加偏移,跳转浮动最相宜。
7. 给备考同学的一句话
寻址方式是软考选择题的常客。记住:
- 看到
#或直接写数值 → 立即寻址 - 看到寄存器号且操作数就在该寄存器 → 寄存器寻址
- 看到寄存器号且需要访问内存 → 寄存器间接寻址(因为寄存器里是地址)
- 看到 PC + 偏移量 → 相对寻址(通常出现在跳转指令中)
- 看到基址/变址寄存器相加 → 变址或基址寻址
多做几道题就能区分清楚。
🔔 本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅
📥 需要"计算机系统知识"完整思维导图?私信回复"软考计算机"免费获取
#软考中级 #软件设计师 #指令寻址方式 #计算机系统知识