寻址方式——数据寻址
数据寻址
指令分为操作码和地址码,根据地址码寻找指令或者操作数有很多种方式。根据地址码找指令的叫做指令寻址,被寻找的指令为吓一跳欲执行的指令。根据地址码找操作数的叫数据寻址。今天着重讲一下数据寻址的几种方式。寻址方式对于对于编译原理很重要。
寻址特征
指令有10种寻数据寻址方式,那机器拿到一条指令后如何知道用什么寻址方式呢?
文章图片
我们在地址前面加入4个01数代表不同的寻址方式,我们称为寻址特征。
文章图片
对于多地址指令,在每一个地址前加入寻址特征,代表他分别是什么寻址方式。
直接寻址
【寻址方式——数据寻址】
文章图片
后面的地址代表我们想要寻找的数的地址。
文章图片
只需要两次次访问内存,简称两次访存(取指令也算一次)。内存读写相对于cpu来说很慢,因此访存次数是一个很重要的指标。
间接寻址
文章图片
指令的地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址。
文章图片
访存次数
取指令访存一次
取操作数访存两次
一共三次。
我们上述都是找的地址的地址,称为一次间接寻址,还有多次间接寻址。
文章图片
如两次寻址,原理类似,就是嵌套次数不同。
这样增加了访存次数。为什么要有间接寻址呢?
1.扩大寻址范围,如果地址A的位数小于有效地址EA的位数,所以EA可以扩大寻址范围,可以找到更多的数。
2.如果一个操作数的地址会发生变换,间接寻址不需要修改指令。
多级间接寻址相比一级间接寻址有利于程序的多级调用,这里不再讲述。
寄存器寻址
文章图片
寄存器寻址是指地址代表操作数所在的寄存器编号(寄存器地址),寄存器存在于cpu中,相较于内存可以很快的访问。并且寄存器数量较少(读写速度越快,造价越昂贵,数量越少),所以需要的地址位数更少。
文章图片
取指令访存一次,取操作数不访存,一共访存一次。
寄存器间接寻址
文章图片
类比于间接寻址,寄存器间接寻址的地址是一个寄存器地址,此寄存器存放操作数所在主存单元的地址。
文章图片
取指令访存一次,取操作数访存一次,一共访存两次。优点是比间接寻址更快。
隐含寻址
并没有给出具体的地址,而是指令中隐含操作数的地址
文章图片
如图,给出一个操作数的地址,另一个操作数隐含在ACC,完成算数运算。
有点有利于缩短指令字长。
立即数寻址
文章图片
立即数寻址的地址不是一个地址,而是操作数本身,又称作立即数。
取指令访存一次,总共访存一次。
堆栈寻址
操作数存放在堆栈中,隐含使用堆栈指针作为操作数地址。
文章图片
堆栈分为硬堆栈与软堆栈,硬堆栈的数据存放在寄存器中,软堆栈的数据存放在主存中。加入一个指令是执行家法指令,会依次POP出栈顶的两个寄存器中的数,进行相加操作后再PUSH回栈顶。
推荐阅读
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 2019-02-13——今天谈梦想()
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 低头思故乡——只是因为睡不着
- 取名——兰
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式