立即数寻址,直接将操作数存放于指令的地址码,但由于指令地址码的位数有限,导致指令只能处理绝对值比较小的操作数。
寄存器寻址,将操作数存于CPU中的通用寄存器,但由于寄存器数量有限,导致指令能处理的操作数的量比较少,即寻址范围较小。
所以,更多的数据寻址是基于存储器的。
1. 直接寻址,直接寻址就是用指令的地址码直接给出操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址,E=A。
直接寻址增加了访存时间,相比立即寻址和寄存器寻址,在执行速度上要慢一些。
另外,为了实现较大的寻址范围,指令中地址码的长度不能太短,所以在指令长度受限的前提下,地址码的个数一般不超过两个。
由于目前主存储器的地址空间很大,而指令地址码的数值表示范围有限,所以指令直接寻址只能表示部分主存单元的地址。
为了突破这一限制,考虑将更多的主存地址存放于指令地址码可识别的内存单元中,这样,寻址范围扩大为主存单元所能识别的地址空间,实现访问整个主存的效果。同时,指令地址码变为操作数的地址的地址,E=括号 括号 A。
这就是间接寻址,间接寻址指令在访问操作数的时候,首先根据地址码取到操作数的地址,然后再根据操作数的地址访问操作数。
间接寻址的优点是使用同一条指令可以访问存放于不同主存单元中的数据,相对于直接寻址而言,扩大大了操作数的寻址范围。主要缺点是,增加了一次访存时间,降低了执行速度。
对间接寻址再进行改进,将操作数的主存地址存于寄存器,再把寄存器的编号存于指令的地址码,这样就减少了一次访存操作,操作数的有效地址E=(Ri),这种寻址方式称为寄存器间接寻址。
寄存器间接寻址指令较短,通过改变寄存器中的主存地址,可以用相同的指令来处理不同的数据,有效保持了较大的寻址范围;而且由于只需要一次访存,也保持了较快的执行速度较快。