寻址方式——数据寻址

数据寻址 指令分为操作码和地址码,根据地址码寻找指令或者操作数有很多种方式。根据地址码找指令的叫做指令寻址,被寻找的指令为吓一跳欲执行的指令。根据地址码找操作数的叫数据寻址。今天着重讲一下数据寻址的几种方式。寻址方式对于对于编译原理很重要。
寻址特征
指令有10种寻数据寻址方式,那机器拿到一条指令后如何知道用什么寻址方式呢?
寻址方式——数据寻址
文章图片

我们在地址前面加入4个01数代表不同的寻址方式,我们称为寻址特征。
寻址方式——数据寻址
文章图片

对于多地址指令,在每一个地址前加入寻址特征,代表他分别是什么寻址方式。
直接寻址
【寻址方式——数据寻址】寻址方式——数据寻址
文章图片

后面的地址代表我们想要寻找的数的地址。
寻址方式——数据寻址
文章图片

只需要两次次访问内存,简称两次访存(取指令也算一次)。内存读写相对于cpu来说很慢,因此访存次数是一个很重要的指标。
间接寻址
寻址方式——数据寻址
文章图片

指令的地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址。
寻址方式——数据寻址
文章图片

访存次数
取指令访存一次
取操作数访存两次
一共三次。
我们上述都是找的地址的地址,称为一次间接寻址,还有多次间接寻址。
寻址方式——数据寻址
文章图片

如两次寻址,原理类似,就是嵌套次数不同。
这样增加了访存次数。为什么要有间接寻址呢?
1.扩大寻址范围,如果地址A的位数小于有效地址EA的位数,所以EA可以扩大寻址范围,可以找到更多的数。
2.如果一个操作数的地址会发生变换,间接寻址不需要修改指令。
多级间接寻址相比一级间接寻址有利于程序的多级调用,这里不再讲述。
寄存器寻址
寻址方式——数据寻址
文章图片

寄存器寻址是指地址代表操作数所在的寄存器编号(寄存器地址),寄存器存在于cpu中,相较于内存可以很快的访问。并且寄存器数量较少(读写速度越快,造价越昂贵,数量越少),所以需要的地址位数更少。
寻址方式——数据寻址
文章图片

取指令访存一次,取操作数不访存,一共访存一次。
寄存器间接寻址
寻址方式——数据寻址
文章图片

类比于间接寻址,寄存器间接寻址的地址是一个寄存器地址,此寄存器存放操作数所在主存单元的地址。
寻址方式——数据寻址
文章图片

取指令访存一次,取操作数访存一次,一共访存两次。优点是比间接寻址更快。
隐含寻址
并没有给出具体的地址,而是指令中隐含操作数的地址
寻址方式——数据寻址
文章图片

如图,给出一个操作数的地址,另一个操作数隐含在ACC,完成算数运算。
有点有利于缩短指令字长。
立即数寻址
寻址方式——数据寻址
文章图片

立即数寻址的地址不是一个地址,而是操作数本身,又称作立即数。
取指令访存一次,总共访存一次。
堆栈寻址
操作数存放在堆栈中,隐含使用堆栈指针作为操作数地址。
寻址方式——数据寻址
文章图片

堆栈分为硬堆栈与软堆栈,硬堆栈的数据存放在寄存器中,软堆栈的数据存放在主存中。加入一个指令是执行家法指令,会依次POP出栈顶的两个寄存器中的数,进行相加操作后再PUSH回栈顶。

    推荐阅读