774 字
4 分钟
寻址方式
寻址方式比较复杂的一般是cisc,risc指令集的运算指令一般要求源操作数在寄存器中或者是立刻数,目标操作数一般是寄存器,不会牵扯到隐式的load store操作
指令寻址
- 顺序执行 -> 顺序寻址
- 分支、循环 -> 跳跃寻址
数据寻址

- 可以给操作数加上寻址特征位,此时操作数实际上是由寻址特征位加形式地址组成
- 设计几类不同指令,不同的操作码之间采用不同的寻址方式,
- 下列有效地址给出的是寄存器编号或者是内存地址
- 对于操作数不来自于额外对内存寻址的寻址方式(立刻数寻址例外因为直接从指令中译码即可),寻址范围是X
- 形式地址记作
- 偏移寻址 即表格的后4种
| 说明 | 有效地址 | 寻址范围 | 操作数 | (获取操作数的额外)访存次数(不记获取指令的访存次数) | |
|---|---|---|---|---|---|
| 隐含寻址 | 操作数来自事先约定寄存器如(ACC)+OP0 -> (ACC) | 事先约定 | X | 从事先约定的地方获取 | 0 |
| 立刻数寻址 | 形式地址即立刻数 | X | X | 0 | |
| 寄存器寻址 | 形式地址是寄存器编号 | 寄存器编号 | X | 0 | |
| 直接寻址(绝对寻址) | 形式地址给出的是操作数所在的内存地址,A的位数限制了寻址范围 | 1 | |||
| 间接寻址 | 两次寻址得到真正的操作数,扩大了访存范围 | 整个内存空间 | 2 | ||
| 寄存器间接寻址 | 形式地址是寄存器编号,把该寄存器的内容作为操作数的地址 | 整个内存空间 | 1 | ||
| 相对寻址 | 相对于PC寄存器形成有效地址, PC指向的是下一条指令。 其实我觉得这个不应该放到数据寻址,实际上就是跳跃寻址 | ,这里的1是一个指令宽度的意思,注意1 | ,注意1 | X | X |
| 基址(加偏移量)寻址 | 用于连续分配的多道程序设计,在某一道程序执行时BR基址寄存器不变,形式地址A发生变化 | 1 | |||
| 变址寻址 | 访问数组或者结构体采用,形式地址不变作为基地址,变址寄存器发生变化,比如每次加sizeof(Elem),这样就能访问数组的每一个元素 | ,这里的I是index的意思 | 1 | ||
| 堆栈寻址 | 访问栈上的变量 | 1 | |||
| 比例变址寻址 |
其他
- 注意有效地址与操作数的区别,让你给出有效地址别把操作数作为答案,给出操作数别把有效地址作为答案
- 寻址方式的组合使用
- 王道P173 05题
