寻址方式——数据寻址

数据寻址

指令分为操作码和地址码,根据地址码寻找指令或者操作数有很多种方式。根据地址码找指令的叫做指令寻址,被寻找的指令为吓一跳欲执行的指令。根据地址码找操作数的叫数据寻址。今天着重讲一下数据寻址的几种方式。寻址方式对于对于编译原理很重要。

寻址特征

指令有10种寻数据寻址方式,那机器拿到一条指令后如何知道用什么寻址方式呢?
image.png
我们在地址前面加入4个01数代表不同的寻址方式,我们称为寻址特征。
image.png

对于多地址指令,在每一个地址前加入寻址特征,代表他分别是什么寻址方式。

直接寻址

image.png
后面的地址代表我们想要寻找的数的地址。
寻址方式——数据寻址_第1张图片
只需要两次次访问内存,简称两次访存(取指令也算一次)。内存读写相对于cpu来说很慢,因此访存次数是一个很重要的指标。

间接寻址

image.png
指令的地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址。
寻址方式——数据寻址_第2张图片
访存次数
取指令访存一次
取操作数访存两次
一共三次。
我们上述都是找的地址的地址,称为一次间接寻址,还有多次间接寻址。
寻址方式——数据寻址_第3张图片
如两次寻址,原理类似,就是嵌套次数不同。
这样增加了访存次数。为什么要有间接寻址呢?
1.扩大寻址范围,如果地址A的位数小于有效地址EA的位数,所以EA可以扩大寻址范围,可以找到更多的数。
2.如果一个操作数的地址会发生变换,间接寻址不需要修改指令。
多级间接寻址相比一级间接寻址有利于程序的多级调用,这里不再讲述。

寄存器寻址

image.png
寄存器寻址是指地址代表操作数所在的寄存器编号(寄存器地址),寄存器存在于cpu中,相较于内存可以很快的访问。并且寄存器数量较少(读写速度越快,造价越昂贵,数量越少),所以需要的地址位数更少。
寻址方式——数据寻址_第4张图片
取指令访存一次,取操作数不访存,一共访存一次。

寄存器间接寻址

image.png
类比于间接寻址,寄存器间接寻址的地址是一个寄存器地址,此寄存器存放操作数所在主存单元的地址。
寻址方式——数据寻址_第5张图片
取指令访存一次,取操作数访存一次,一共访存两次。优点是比间接寻址更快。

隐含寻址

并没有给出具体的地址,而是指令中隐含操作数的地址
寻址方式——数据寻址_第6张图片
如图,给出一个操作数的地址,另一个操作数隐含在ACC,完成算数运算。
有点有利于缩短指令字长。

立即数寻址

image.png
立即数寻址的地址不是一个地址,而是操作数本身,又称作立即数。
取指令访存一次,总共访存一次。

堆栈寻址

操作数存放在堆栈中,隐含使用堆栈指针作为操作数地址。
寻址方式——数据寻址_第7张图片
堆栈分为硬堆栈与软堆栈,硬堆栈的数据存放在寄存器中,软堆栈的数据存放在主存中。加入一个指令是执行家法指令,会依次POP出栈顶的两个寄存器中的数,进行相加操作后再PUSH回栈顶。

你可能感兴趣的