基址寻址与变址寻址

2018-1-4

1.基址寻址
(1)基址寻址需设有基址寄存器BR,其操作数的有效地址EA等于指令字中的形式地址A(偏移量)与基址寄存器中的地址(基地址)相加。
EA=A+(BR)
基址寄存器可以采用隐式或者显式两种。
隐式就是说我们使用专门的基址寄存器BR,用户不必显式指出该基址寄存器,只需要由指令的寻址特征位反映出基址寻址即可。
OP+寻址特征+A
显式是指在一组通用寄存器中,用户需要显式指出哪个寄存器作为我们的基址寄存器,存放基地址。
(2)基址寻址可以扩大我们的寻址范围,因为基址寄存器的位数可以大于形式地址A的位数。
(3)基址寻址在多道程序中极为有用。比如在汇编当中,我们有多个段,有时我们不必关心自己的程序位于哪一个位置,我们只需要给出基址寄存器,操作系统或者管理程序就可以根据主存空间状况,为我们指定的基址寄存器赋一个初值。

2.变址寻址
(2)变址寻址其有效地址EA等于指令字中的形式地址A与变址寄存器IX中的内容相加。
EA=A+(IX)
看上去好像和上面的那个差不多,实际上并非如此,基址寻址中的基址寄存器的内容通常由操作系统或者管理程序决定,在程序执行过程中是不可变的,而指令字中的A是可变的。变址寻址中变址寄存器的值是由用户设定的,在程序执行过程中是可变的,而指令字中的A是不可变的。
变址寻址特别适合编制循环程序。
比如我们要求出前100个数组元素的和:
如果我们用基址寻址的话,我们的偏移量是从指令中的形式地址得来的,那么如果我们要使偏移量不同,我们就要用不同的指令。这样看来我们就要写好多指令哦!但是如果我们用变址寻址的话,那么我们的偏移量是放在变址寄存器中的,那么我们无需改变指令,而只要改变寄存器中的值即可,因为我们的指令中存放的只是寄存器的编号而已,这样我们就大大缩短了我们指令的长度!

你可能感兴趣的:(计算机组成原理)