计算机组织结构(十三) 指令集:寻址方式和指令格式
表示:
- A: 指令中地址字段的内容
- R: 指向寄存器的指令字段的内容
- EA: 被访问未知的实际(有效)地址
- (X): 存储器位置 X 或者寄存器 X 的内容
立即寻址 (Immediate Addressing)
操作数存在于指令中:
应用: 定义和使用常数, 或者设置变量的初始值.
优点: 获取操作书不需要访问存储器, 只获取指令
缺点: 数字的大小被限制为地址字段的大小
.jpg)
直接寻址 (Direct Addressing)
地址字段包含着操作数的有效地址, 早期计算机常见
优点: 只有一次存储器访问, 不需要进行专门计算
缺点: 只能提供有限的地址空间
间接寻址(Indirect Addressing)
指令中地址字段只是一个存储器字地址, 而这个地址保存着操作数的全长度地址
优点: 扩大了寻址空间
缺点: 需要访问两次内存来获取操作数
评价: 一次能够引用的不同地址数存在限制
.jpg)
寄存器寻址 (Register Addressing)
类似直接寻址, 地址字段指的时寄存器而不是一个主存地址.
优点: 指令中只需要一个很小的地址字段用来指向寄存器, 不需要访问内存
缺点: 寻址空间极其有限
注意: 只有寄存器得到了有效的使用才有意义
寄存器间接寻址(Register Indirect Addressing)
地址的字段指向一个寄存器
优点: 扩大了寻址空间, 比间接寻址少访问一次主存
劣势: ?
.jpg)
偏移寻址(Displacement Addressing)
结合直接寻址和间接寻址
指令中有两条地址字段, 其中至少一个是显性的. 其中一个地址字段(val = A) 被直接使用, 另一个地址字段指向寄存器. 寄存器的内容加上 A 产生有效地址.
三种偏移寻址:
1.相对寻址
隐式引用的寄存器时程序计数器PC
, 即当前 PC 的值 (为现执行指令的下一条指令的地址), 加上地址字段的值(A, 通常为补码整数), 得到有效地址
优点: 利用了程序局部性的概念, 并在指令中保存了地址位.
用途: 子程序跳转?
2.基址寄存器寻址
引用的寄存器含有一个主存地址, 地址字段含有一个相对于那个地址的偏移量(usually unsigned)
可以是显式引用, 也可以是隐式引用
3.变址
地址字段引用一个主存地址, 被引用的寄存器对于那个地址有一个正的偏移量
用法: 高效完成重复操作, 将值 A 存入指令的地址字段, 选取一个寄存器作为变址寄存器, 初始化为0, 每次操作之后, 变址寄存器加1
扩展:结合间接寻址和变址:
后变址: 间接寻址之后变址
EA = (A) + (R) 前变址: 变址在间接寻址之前
EA = (A+(R))
栈寻址
栈指针维护在寄存器中, 所以对内存栈位置的访问实际上是一种寄存器间接寻址方式.
注意: 与栈相关的是一个指针, 它的值可能是栈顶地址或者第三个元素的地址(前两个可能已经进入寄存器)
指令格式
指令长度, 位分配, 可变长度指令