计算机组成原理_数据寻址
计算机组成原理总目录
数据寻址
数据寻址:定位指令的地址码所对应的物理地址
1. 寻址特征
数据寻址包括有多种方式,为了表明数据寻址的方式,通常在地址码中还包括一个字段【寻址特征】
包括二地址指令,每个地址码中都包含【寻址特征】
2. 数据寻址方式
- 直接寻址:顾名思义,形式地址A就是实际的物理地址
- 间接寻址:形式地址不是实际的物理地址,而是存放【最终的物理地址】的地址
(1)最终的物理地址我们常用EA来表示
(2)其中不带括号的A或者EA都代表地址,而带括号的(A)和(EA)代表着对应地址内的数据
不仅如此,间接寻址还包括多级,就像A想要找E,但A只找到了B,B说你去找C,C说你去找D,最后通过D找到了E
- 寄存器寻址:给出的地址A是CPU内的寄存器编号,即EA = Ri
- 寄存器间接寻址:结合了寄存器寻址和间接寻址,最终地址存储在寄存器当中
- 隐含寻址:用于一地址指令的操作数为两个的时候,另一个数据的地址是隐含的
- 立即寻址:在立即寻址中,地址A就是所要找的数据,即A就是操作数本身(一般采用补码形式)
- 基址寻址:将CPU内的基址寄存器内的数据(BR)加上形式地址A,得到最终地址EA = (BR) + A
- 基址寻址中,既可以采用【专用的寄存器】作为【基址寄存器】,也可以采用【通用寄存器】作为【基址寄存器】
优点:方便程序的浮动,方便实现多个程序的并发运行(多道程序),且基址寄存器是面向操作系统的,用户无法修改基址的数据
(每个程序的起始地址不同,通过基址寻址能快速定位另一个程序的位置)
- 变址寻址:将CPU内的变址寄存器内的数据(IX)加上形式地址A,得到最终地址EA = (IX) + A
在变址寻址中,既可以采用【专用的寄存器】作为【变址寄存器】,也可以采用【通用寄存器】作为【变址寄存器】
变址寻址的寻址方式和基址寻址方式几乎完全相同,其不同点在于:
(1)基址寄存器是面向操作系统的,用户(程序员)无法修改其基址寄存器的值,程序间浮动
(2)变址寄存器是面向用户的,用户(程序员)可以修改编址寄存器的值作为程序内部寻址的偏移量,程序内浮动,适用于循环语句
- 相对寻址:将程序计数器的数据(PC)和形式地址A相加,得到最终地址EA =(PC)+ A(其中A可正可负,用补码表示)
- 显而易见,程序计数器记录的是指令的地址,和形式地址A相加后可以得到向前(正A)或者向后(负A)偏移的地址,适用于程序的循环语句,方便程序内部的浮动
- 堆栈寻址:指令所要使用的操作数存储在一个堆栈结构中,栈顶指针(SP)默认作为操作数地址
其中既可以使用一段主存空间作为堆栈空间,也可以使用寄存器作为堆栈空间
- 如下:利用寄存器堆栈寻址完成一次加法操作
- 也可使用主存空间作为堆栈空间