一、间接寻址
- 定义:在间接寻址中,指令地址字段中的形式地址不是操作数的真正地址,而是指向操作数地址的指针,或者说是操作数地址的存储单元的地址。
- 原理:处理器首先访问该形式地址,获取实际数据的地址,然后再进行相应的读/写操作。这种方式需要两次访问内存:第一次获取地址,第二次访问数据。
- 特点:间接寻址增加了寻址的灵活性,因为可以通过修改指针的值来改变操作数的地址,而无需修改指令本身。
二、基址寻址
- 定义:基址寻址是将CPU中基址寄存器的内容加上指令格式中的形式地址,形成操作数的有效地址。
- 原理:基址寄存器中存储的是一个基地址,指令中的形式地址是一个偏移量。处理器将这两个值相加,得到操作数的实际地址。
- 特点:基址寻址主要用于解决程序的动态定位问题。在多道程序的环境下,操作系统可以根据主存空间情况给基址寄存器赋值,从而将虚地址转化为实地址。
三、相对寻址
- 定义:相对寻址是将程序计数器(PC)的内容加上指令格式中的形式地址(位移量),形成操作数的有效地址或转移地址。
- 原理:PC寄存器中存储的是当前执行指令的地址。处理器将PC的值与指令中的位移量相加,得到下一个操作数或转移指令的地址。
- 特点:相对寻址主要用于转移指令,使得程序的浮动变得更加容易。因为操作数的地址不是固定的,而是与指令之间相差一个固定值。
四、变址寻址
- 定义:变址寻址是指令地址码部分给出的地址与指定的变址寄存器的内容通过加法器相加,所得的和作为地址从存储器中读出所需的操作数。
- 原理:变址寄存器中存储的是一个变址值,指令中的地址码是一个基地址或偏移量。处理器将这两个值相加,得到操作数的实际地址。
- 特点:变址寻址主要用于数组处理或循环结构中,因为可以通过修改变址寄存器的值来依次访问数组中的元素或循环体中的变量。
五、区别
-
操作数的地址来源:
- 间接寻址:操作数的地址由指令中的形式地址(指针)指向。
- 基址寻址:操作数的地址由基址寄存器的内容和指令中的形式地址相加得到。
- 相对寻址:操作数的地址由程序计数器(PC)的内容和指令中的位移量相加得到。
- 变址寻址:操作数的地址由指令中的地址码和变址寄存器的内容相加得到。
-
应用场景:
- 间接寻址:适用于需要通过指针访问数据的场景,如链表、树等数据结构。
- 基址寻址:主要用于解决程序的动态定位问题,适用于多道程序环境。
- 相对寻址:主要用于转移指令,使得程序的浮动变得更加容易。
- 变址寻址:主要用于数组处理或循环结构中,方便依次访问数组元素或循环变量。