计算机组成原理:史上最全寻址方式集合

史上最全寻址方式集合

话不多说,直接上我们这次说的主题:寻址方式
寻址方式中,我们的大框架可以分为两种:指令寻址数据寻址,来看看吧!
提前术语说明:
(A)指的是A所指向的单元地址。

指令寻址

指令寻址比较简单,分为两种,顺序寻址跳跃寻址
顺序寻址: 通过程序计数器PC加1,自动形成下一条指令的地址;
跳跃寻址: 通过转移类指令实现。
计算机组成原理:史上最全寻址方式集合从上图中我们可以看到,从指令地址0,1,2,3一直是顺序寻址,从3跳跃到7是跳跃寻址,指令为JMP 7。

数据寻址

数据寻址方式很多,基本原理是地址码仅仅是形式地址,我们这里记为A,真实地址我们几位EA,还有几位表示寻址特征。
1.立即寻址
这种寻址方式形式地址就是操作数本身,也叫立即数
优点: 寻址简单,不必访问存储器。
缺点: 位数有限,限制了操作数的范围。
2.直接寻址
这种寻址方式的形式地址A就是操作数的地址EA(EA=A),在这种寻址方式中,执行阶段访问一次存储器。
优点: 寻址简单,无需计算操作数地址。
缺点: A的位数限制了寻址范围,且需要修改A的值才能修改操作数地址。
3.隐含寻址
隐含寻址是指指令字不直接给出操作数,而操作数是隐含在寄存器或操作码中。
计算机组成原理:史上最全寻址方式集合
这个例子是一个一地址格式加法指令,其中一个操作数的地址有A直接给出,另一个操作数隐含在累加器ACC中。
优点: 一个操作数隐含在寄存器或操作码中,便可减少地址数目,有利于缩短指令字长。
缺点: 同样的,A的位数限制了寻址的范围。
4.间接寻址
在这种寻址方式中,形式地址A不再直接是操作数的地址,而是知道指出操作数地址所在的地址,操作数的地址由形式地址A间接提供,为间接寻址。另一方面,间接寻址不一定只有一次寻址,也有可能多次间接寻址。例如:
计算机组成原理:史上最全寻址方式集合
图(b)中就是两次间接寻址,即EA=((A)),在多次间接寻址中,我们会足以到(A)首位为1,表示间接寻址未结束,为0就是改地址内容就为操作数的地址。
优点: 扩大了操作数的寻址范围,在前面的寻址方式中,直接利用形式地址A来进行寻址,但是我们知道A小于指令字长,我们姑且认为指令字长与存储字长相同,我们不妨设字长均为16位,A为8位,由此,前面三种寻址范围仅为28,而利用间接寻址,我们的寻址范围可以达到216,即使是间接寻址,也有215;另一方面,从编程序角度来讲,间接寻址是十分方便的,如图
计算机组成原理:史上最全寻址方式集合
我们可以十分简单的完成子程序的返回([email protected]可以无条件转回原地址,如81,202)。
缺点: 在我们的指令执行阶段,我们至少得访问存储器两次,多次寻址则更多。
5.寄存器寻址
顾名思义,形式地址A指出的是寄存器的编号,操作数在该寄存器中
优点: 无需访存,指令字短,有效地缩短指令中某个地址段的位数。
6.寄存器间接寻址
顾名思义,就是形式地址A指出寄存器编号,寄存器中存放有操作数的地址EA,由EA找到操作数。这种寻址方式比间接寻址少访存一次。
7.基址寻址
接下来是重头戏,基址寻址需要设有专门的基址寄存器BR,操作数的有效地址EA等于指令字中的形式地址A与基址寄存器BR中的内容相加,BR中的内容我们将其称为基地址
在这里,我们有一些重要的概念需要区分:
1.BR的内容是由操作系统或者是管理系统确定的,从这个层面上来讲BR的内容是可变的,当程序执行时,我们的BR中的内容是不变的。
2.基址寻址是面向系统的。
3.基址寻址在多道程序中极为有用。用户不必考虑自己的程序位于主存的哪个位置,完全由操作系统或管理程序根据主存的使用状况,赋予基址寄存器一个初始值。

未完待续…