存储器既可用来存放数据,又可用来存放指令。因此,当某个操作数或某条指令存放在某个存储单元时,其存储单元的编号,就是该操作数或指令在存储器中的地址。
在存储器中,操作数或指令字写入或读出的方式权有地址指定方式、相联存储方式和堆栈存取方式。几乎所有的计算机,在内存中都采用地址指定方式。当采用地址指定方式时,形成操作数或指令地址的方式,称为寻址方式。寻址方式分为两类,即指令寻址方式和数据寻址方式,前者比较简单,后者比较复杂。
㈠指令的寻址方式
指令的寻址方式有两种,一种是顺序寻址方式,另一种是跳跃寻址方式。
㈡操作数基本寻址方式
☞隐含寻址
这种类型的指令,不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。
☞立即寻址(立即数寻址)
指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。指令中的操作数称为立即数。
立即寻址方式的特点是指令中包含的操作数立即可用,节省了访问内存的时间。
☞直接寻址
直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。
☞间接寻址
间接寻址是相对于直接寻址而言的,在间接寻址的情况下,指令地址子段中的形式地址不是操作数的真正地址,而是操作数地址的指示器。
☞寄存器寻址
当操作数不在内存中,而是放在CPU 的通用寄存器中时,可采用寄存器寻址方式——指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。
☞寄存器间接寻址
寄存器间接导址与寄存器寻址的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,改地址指明的操作数在内存中。
☞偏移寻址
常用的三种偏移寻址是相对寻址、基址寻址、变址寻址。
①相对寻址
隐含引用的专用寄存器是程序计数器(PC),即EA=A+(PC),它是当前PC的内容加上指令地址字段中A的值。
②基址寻址
被引用的专用寄存器含有一个存储器地址,地址字段含有一个相对于该地址的偏移量(通常是无符号整数)。寄存器的引用可以是显式的,也可以是隐式的。址的偏移量(通常是无符号整数)。寄存器的引用可以是显式的,也可以是隐式的。基址寻址也利用了存储器访问的局部性原理。
③变址寻址
地址域引用一个主存地址,被引用的专用寄存器含有对那个地址的正偏移量。这意味着主存地址位数大于寄存器中的偏移量位数,与基址寻址刚好相反。但是二者有效地址的计算方法是相同的。变址的用途是为重复操作的完成提供一种高效机制。