存储器既可用来存放数据,又可用来存放指令。
当某个操作数或某条指令存放在某个存储单元时,其存储单元的编号,就是该操作数或指令在存储器中的地址。
在存储器中,操作数或指令字写入或读出的方式,有地址指定方式、相关存储方式和堆栈存取方式。
几乎所有的计算机,在内存中都采用地址指定方式。
当采用地址指定方式时,形成操作数或指令地址的方式,称为寻址方式。
寻制方式分为两类及指令寻址方式和数据寻址方式。
指令的寻址方式
指令的寻址方式有两种,一种是顺序寻址方式,另一种是跳跃式寻址方式。
顺序寻址方式
通常是按一条指令接一条指令的顺序进行。
跳跃寻址方式
跳跃是指下条指令的地址码不是由程序计算器给出的,而是由本条指令给出。
采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序应用。
操作数基本寻址方式
操作数的来源一般有三种:
由指令中的地址码部分直接给出操作数;
将操作数存放在CPU内的通用数据寄存器中;
更一般化的方式是将操作数存放在内存的数据区中。
而对于内存的寻址,既可以在指令中直接给出操作数的实际访存地址(称为有效地址),也可以在指令的地址字段给出所谓的形式地址。
形成操作数的有效地址的方法,称为操作数的寻址方式。
由于指令中操作数字段的地址码由形式地址和寻址方式特征位等组合形成。
一般来说,指令中所给出的地址码,并不是操作数的有效地址。
形式地址A,也称偏移量,它是指令字结构中给定的地址量。
寻址方式特征位,由间址位和变址位组成。
如果这条指令无间址和变址的要求,那么形式的地址就是操作数的有效地址。
如果指令中指明要变址或间址变换,那么形式地址就不是操作数的有效地址,而要经过指定方式的变换,才能形成有效地址。
寻址过程就是把操作数的形式地址,变换为操作数的有效地址的过程。
隐含寻址
规定累加寄存器AC作为第二操作数地址
累加寄存器AC对单地址指令来说是隐含地址
立即寻址
指令的地址字段指出的不是操作数的地址,而是操作数本身。
直接寻址
直接寻址是一种基本的寻址方法,其特点是:指令格式的地址字段中直接指出操作数在内存的地址A。
由操作数的地址直接给出而不需要经过某种变化,所以称这种寻址方式为直接寻址方式。
间接寻址
寄存器寻址
当操作数不在内存中,而是放在CPU的通用寄存器中,可采用寄存器寻址方式。
寄存器间接寻址
偏移寻址
直接寻址和寄存器间接寻址的结合称为偏移寻址。
常见的三种偏移寻址是相对寻址,基址寻址,变址寻址。
相对寻址
隐含引用的专用寄存器是程序计数器(PC)。
基址寻址
被引用的专用寄存器含有一个存储器地址,地址字段含有一个相对于该地址的偏移量(通常是无符号整数)。
变址寻址
地址域引用一个主存地址,被引用的专用寄存器含有对那个地址的正偏移量。
堆栈寻址
堆栈有寄存器堆栈和存储器堆栈两种方式,它们都以先进后出的原理存储数据。