计算机组成原理——指令的寻址方式
4.2 指令的寻址方式
出自up主Beokayy传送门
1. 指令寻址和数据寻址
指令寻址
- 顺序寻址:
- 通过PC+“1”,自动形成下一条指令的地址。
- 跳跃寻址:
- 通过转移类指令实现,由指令给出下条指令地址的计算方式。
- 跳跃的结果是当前指令修改PC值,所以下一条指令的地址仍然通过PC给出。
数据寻址
操作码 | 寻址特征 | 形式地址A |
---|
- 如何在指令中表示一个操作数的地址,如何用这种表示得到操作数或怎样计算出操作数的地址。
2.常见的数据寻址方式
隐含寻址
- 不明显给出操作数的地址,而在指令中隐含。
立即寻址
- 指令的地址字段指出的不是操作数的地址,而是操作数本身,又称为立即数。
直接寻址
- 指令字中的形式地址A是操作数的真实地址EA
间接寻址
- 指令的地址字段给出的形式是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)。
寄存器寻址
- 指令字中直接给出操作数所在的寄存器编号,即EA=Ri,其操作数在由Ri所指的寄存器内。
寄存器间接寻址
- 指令的地址字段给出的形式地址是换做数所在主存单元的地址,即EA=(Ri)。
相对寻址
- PC取指自增后的内容加上形式地址A而形成操作数的有效地址,即 ( P C ) + 1 → P C (PC) + 1 \to PC (PC)+1→PC, E A = ( P C ) + A EA = (PC) + A EA=(PC)+A。
- A是相对于PC值的偏移量,可正可负,由补码表示。
- 多道程序中重要的寻址方式,便于程序浮动。
基址寻址
- 将CPU中基址寄存器BR的内容加上指令格式中的形式地址A而形成操作数的有效地址,即 E A = ( B R ) + A EA = (BR) + A EA=(BR)+A。
- 基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量 )。
- 基址寄存器既可以采用专用寄存器,也可以采用通用寄存器。
- 有利于多道程序设计,并可用于编制浮动程序。
变址寻址
- 有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容之和。即 E A = ( I X ) + A EA = (IX) + A EA=(IX)+A。
- 面向用户,变址寄存器的内容可由用户改变(作为偏移量),形式地址不变(作为基地址)。
- 适合编制循环程序以及处理数组问题。
堆栈寻址
- 堆栈是存储器(或专用寄存器组)中一块特定的、按后进先出原则管理的存储区,该存储区中读写单元的地址由一个特定的寄存器堆栈指针SP给出。
- 堆栈可分为硬堆栈和软堆栈:
- 硬堆栈:寄存器堆栈,成本较高,不适合做大容量的堆栈。
- 软堆栈:从主存中划出一段区域来做堆栈,是最划算且最常用的方法。
总结
寻址方式 | 有效地址 | 访存次数 |
---|---|---|
隐含寻址 | 程序指定 | 0 |
立即寻址 | A即是操作数 | 0 |
直接寻址 | EA=A | 1 |
一次间接寻址 | EA=(A) | 2 |
寄存器寻址 | EA=Ri | 0 |
寄存器间接一次寻址 | EA=(Ri) | 1 |
相对寻址 | (PC) +1→PC EA=(PC) +A | 1 |
基址寻址 | EA=(BR) +A | 1 |
变址寻址 | EA=(IX) +A | 1 |