寻址方式——数据寻址

AntiCrawler
• 阅读 4203

数据寻址

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

寻址特征

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

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

直接寻址

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

间接寻址

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

寄存器寻址

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

寄存器间接寻址

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

隐含寻址

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

立即数寻址

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

堆栈寻址

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

点赞
收藏
评论区
推荐文章
桃浪十七丶 桃浪十七丶
4年前
计算机组成原理4.2指令寻址方式
4.2.1指令寻址和数据寻址4.2.1.1指令寻址:顺序寻址:取出指令后PC指向下一条需执行指令的地址。1)顺序寻址:定长指令字结构寻址:假设指令字长存储字长16bit2Byte,且主存按字编址。则每次取出指令后PC1;若主存按字节编址,意味着每条指令都会占两个地址,则每次取出指令后PC2。变长指令字结构寻址:指令字长存储字
似梦清欢 似梦清欢
2年前
汇编语言
CPU编译后的可执行程序是项目名称命名的exe文件。汇编指令分为两个类型:操作码字段:表征指令的操作特性和功能,是指令的唯一标识。(要做什么操作?)地址码字段:指定参与操作的操作数的地址码。(操作哪里的内存?)指令中指定操作数存储位置的字段称为地址码,地址
Wesley13 Wesley13
3年前
SOFA 源码分析— 自定义路由寻址
!(https://oscimg.oschina.net/oscnet/a53072c91815c9369fa3822fec65defbc2b.png)前言SOFARPC中对服务地址的选择也抽象为了一条处理链,由每一个Router进行处理。同Filter一样,SOFARPC对Router提供了同样的扩展能力。那么就
并发编程
并发编程笔记本博客根据学习而做的笔记,链接如下一、基本概念1、进程与线程进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。进程
桃浪十七丶 桃浪十七丶
4年前
计算机组成原理4.1指令格式
4.1.1指令的基本概念和指令的基本格式操作码:指明CPU进行什么操作。地址码:知指明CPU对谁进行操作。PC:程序计数器,每执行一条指令会1指向下一条指令。指令的概念和基本格式:是指一台计算机执行某种操作的命令,一台计算机的所有指令的集合构成指令集,也叫做指令系统,位于计算机的硬件和OS层面。不同计算机只能执行自己系统的指令,如Intel的x86架构,手
Wesley13 Wesley13
3年前
PIC中档单片机汇编指令详解(5)
位操作指令详述BCF数据寄存器指定位清0语法形式:BCFf,b操作数:f为数据寄存器的低7位地址(0x00~0x7F)B为数据位编号(0~7)执行时间:一个指令周期执行过程:使数据寄存器f的的b位清0状态标志影响:无说明:该指令可对任何数据寄存器的任意一个位置清0,常用于标志位的设定和清除,或者把某一管脚置成低电平。指
Stella981 Stella981
3年前
AngularJS 常用指令
AngularJS指令AngularJS有一套完整的、可扩展的、用来帮助web应用开发的指令集,它使得HTML可以转变成“特定领域语言(DSL)”,是用来扩展浏览器能力的技术之一,在DOM编译期间,和HTML关联着的指令会被检测到,并且被执行,这使得指令可以为DOM指定行为,或者改变它。AngularJS指令带有前
Wesley13 Wesley13
3年前
Java多线程模式之流水线模式
流水线什么是流水线?在计算机中,对于一条具体的指令执行过程,通常可以分为五个部分:取指令,指令译码,取操作数,运算(ALU),写结果。前三步由指令控制器完成,后两步则由运算器完成。按照传统的方式,所有指令顺序执行,那么先是指令控制器工作,完成第一条指令的前三步,然后运算器工作,完成后两步,第一条指令执行完毕。然后第二条指令又是先
Stella981 Stella981
3年前
JVM基础命令
介绍java虚拟机的指令功能,至少能阅读java代码生成的字节码指令含义一、概述Java虚拟机采用基于栈的架构,其指令由操作码和操作数组成。操作码:一个字节长度(0~255),意味着指令集的操作码个数不能操作256条。操作数:一条指令可以有零或者多个操作数,且操作数可以是1个或者多个字节。编译后的代码没有采用操作数
ISA-L库调研
SIMD(singleinstructionmultipledata)单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。以同步方式,在同一时间内执行同一条指令。