首页 > 编程知识 正文

计算机寻址方式详解,计算机组成原理 寻址

时间:2023-05-04 16:31:25 阅读:228351 作者:3812

史上最全寻址方式集合

话不多说,直接上我们这次说的主题:寻址方式
寻址方式中,我们的大框架可以分为两种:指令寻址数据寻址,来看看吧!
提前术语说明:
(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;另一方面,从编程序角度来讲,间接寻址是十分方便的,如图

我们可以十分简单的完成子程序的返回(JMP@A可以无条件转回原地址,如81,202)。
缺点: 在我们的指令执行阶段,我们至少得访问存储器两次,多次寻址则更多。

5.寄存器寻址
hxdyf,形式地址A指出的是寄存器的编号,操作数在该寄存器中
优点: 无需访存,指令字短,有效地缩短指令中某个地址段的位数。

6.寄存器间接寻址
hxdyf,就是形式地址A指出寄存器编号,寄存器中存放有操作数的地址EA,由EA找到操作数。这种寻址方式比间接寻址少访存一次。

7.基址寻址
接下来是重头戏,基址寻址需要设有专门的基址寄存器BR,操作数的有效地址EA等于指令字中的形式地址A与基址寄存器BR中的内容相加,BR中的内容我们将其称为基地址
在这里,我们有一些重要的概念需要区分:
1.BR的内容是由操作系统或者是管理系统确定的,从这个层面上来讲BR的内容是可变的,当程序执行时,我们的BR中的内容是不变的。
2.基址寻址是面向系统的。
3.基址寻址在多道程序中极为有用。用户不必考虑自己的程序位于主存的哪个位置,完全由操作系统或管理程序根据主存的使用状况,赋予基址寄存器一个初始值。

8.变址寻址
变址寻址与基址寻址非常的相似,变址寻址的专用寄存器为IX,操作数的有效地址EA等于形式地址A与变址寄存器IX的内容相加。
但是变址寻址与基址寻址的区别还是相当大的,这种区别要从本质上来看:变址寻址中,由形式地址A提供的基准量是不变的,变址寄存器IX中的内容由用户设定,在程序执行时他的值可变,这种方式山东大学计算机组成原理实验,基准量(A)相当于数组的首地址,(IX)相当于数组的下标;而基址寻址则是由指令提供位移量,寄存器BR提供基准量,这一点主要用于为程序和数据分配存储空间:由于指令中形式地址A的位数限制,无法实现对主存的全盘访问,但是将主存分为若干个访问段,每一个段的首地址存入BR中,形式地址A则是段内的地址,对于调用程序时,BR内的值是可变的,但是一旦调入,BR的值不变。从这个层面上来说,基址寻址面向操作系统的寻址方式,变址寻址面向用户的寻址方式。
当然,变址寻址可以与其他的寻址方式结合使用,对于各类机器需要注意。

9.相对寻址
相对寻址是将程序计数器PC中的值(当前指令的地址)与指令字中的形式地址相加得到的操作数的地址EA,即EA = (PC) + A。

在这个图中,形式地址A其实就是操作数地址相对于当前地址的距离。
但是在相对寻址方式中,每当CPU取出一个字节是,PC = (PC) + 1,或者这样来讲不是很直观,我们来举个例子
假设一个相对寻址的指令是三个字节,后两个字节是相对位移量,低字节地址为字地址,PC当前值是360(十进制),要转到410,那么取出指令后,PC = (PC) + 3(一个指令为三个字节),偏移量为2FH,A占据后两个字节,并且按低字节地址为字地址编址,那么二三字节的值为2F00H。

10.堆栈寻址
堆栈寻址跟计算机中的堆栈硬件有关,比如寄存器组或者主存的一部分空间。堆栈的一些性质相信不用我多数说。
这里,我们就用主存的部分空间说说堆栈:我们用一或两个寄存器来作为堆栈指针SP,用于指出栈顶地址,操作数只能从栈顶地址的存储单元取出。

当压入栈时,SP = (SP) - 1,出栈时,SP = (SP) + 1。
当然,SP的修改与主存的编址方式有关,若是按字节编址,修改量为1;若是16位,修改量为2;32位,修改量为3。

到这里,基本上所有的寻址方式都在这里了。

学这玩意儿,真是麻烦到舌灿莲花,口吐芬芳…

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。