技术标签: 计算机组成原理
寻址方式就是处理器根据指令中给出的地址信息来寻找有效地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。
几乎所有的计算机,在内存中都采用地址指定方式。当采用地址指定方式时,形成操作数或指令地址的方式称为寻址方式。寻址方式分为两类,即指令寻址方式和数据寻址方式,前者比较简单,后者比较复杂。值得注意的是,在传统方式设计的计算机中,内存中指令的寻址与数据的寻址是交替进行的。
指令的寻址方式有以下两种。
① 顺序寻址方式
由于指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令地顺序进行。也就是说,从存储器取出第1条指令,然后执行这条指令;接着从存储器取出第2条指令,再执行第二条指令;接着再取出第3条指令。
这种程序顺序执行的过程,称为指令的顺序寻址方式。为此,必须使用程序计数器(又称指令计数器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。
② 跳跃寻址方式
当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。程序跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容也必须相应改变,以便及时跟踪新的指令地址。
采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的。
注意是否跳跃可能受到状态寄存器的操作数的控制,而跳跃到的地址分为绝对地址(由标记符直接得到)和相对地址(对于当前指令地址的偏移量),跳跃的结果是当前指令修改PC程序计数器的值,所以下一条指令仍是通过程序计数器PC给出。
形成操作数的有效地址的方法称为操作数的寻址方式。由于大型机、小型机、微型机和单片机结构不同,从而形成了各种不同的操作数寻址方式。下面介绍一些比较典型又常用的操作数寻址方式。
① 隐含寻址
这种类型的指令,不是明显地给出操作数的地址。而是在指令中隐含着操作数的地址。例如,单地址的指令格式,就不明显地在地址字段中指出第二操作数的地址,而是规定累加寄存器AC作为第二操作数地址。指令格式明显指出的仅是第一操作数的地址D。因此,累加寄存器AC对单地址指令格式来说是隐含地址。 如:DAA ;
② 立即寻址
指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。如:MOV AX, #5678H 注意:立即数只能作为源操作数,不能作为目的操作数。
③ 直接寻址
直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。
④ 间接寻址
间接寻址是相对直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器,或者说此形式地址单元的内容才是操作数的有效地址。
⑤ 寄存器寻址方式和寄存器间接寻址方式
当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。显然,此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号(可以是8位也可以是16位(AX,BX,CX,DX))。指令结构中的RR型指令,就是采用寄存器寻址方式的例子。如:MOV DS,AX
寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。
⑥ 相对寻址方式
相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址。程序计数器的内容就是当前指令的地址。“相对”寻址,就是相对于当前的指令地址而言。采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,因而所编程序可以放在内存的任何地方。
⑦ 基址寻址方式
在基址寻址方式中将CPU中的基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。基址寻址的优点是可以扩大寻址能力,因为与形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。
⑧ 变址寻址方式
变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。
但使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律变化。为此,必须使变址寄存器的内容实现有规律的变化(如自增1、自减1、乘比例系数)而不改变指令本身,从而使有效地址按变址寄存器的内容实现有规律的变化。
⑨ 块寻址方式
块寻址方式经常用在输入输出指令中,以实现外存储器或外围设备同内存之间的数据块传送。块寻址方式在内存中还可用于数据块移动。
QDUOJ二次开发记录(前端、后端)一、开始前QDUOJ是青岛大学开源的Online Judge系统,目前在Github上有3.8K个Star(截止至20.4.24),具有界面美观、部署简单(采用Docker一键部署)、功能完善等优点,是开源OJ中比较知名的一个系统。本文基于QDUOJ,对前端和后端进行二次开发,记录过程中遇到的问题和解决方法。二、准备1、安装Docker、Docker-Compose(针对Ubuntu系统,其他系统请自行百度)在国内安装Docker、Docker-Compose经
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档51单片机中断嵌套,定时器延时前言一、如何做到定时器延时?二、如何做到外部中断?三、如何合并1.引入库2.读入数据总结前言这里讲的是中断嵌套,具体的话是用定时器延时,外部中断触发,不断切换提示:以下是本篇文章正文内容,下面案例可供参考一、如何做到定时器延时?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、如何做到外部中断?三、如何合并1.引入库代码如下(示例):import
为什么80%的码农都做不了架构师?>>> ...
1. UIScrollView的创建和常用的属性 1> 概述 UIScrollView 是 UIView 的子类, 所以我们可以仿照 UIView 的创建步骤创建一个 UIScrollView UIScrollView 作为所有的滚动视图的基类, 所有学好 UIScrollView 也成为学好 UITableView 和 UICollectionView等滚动视图的...
VDSO(Virtual Dynamically-linked Shared Object)是个很有意思的东西, 它将内核态的调用映射到用户态的地址空间中, 使得调用开销更小, 路径更好.开销更小比较容易理解, 那么路径更好指的是什么呢? 拿x86下的系统调用举例, 传统的int 0x80有点慢, Intel和AMD分别实现了sysenter, sysexit和syscall, sysret, 即所谓的快速系统调用指令, 使用它们更快, 但是也带来了兼容性的问题. 于是Linux实现了vsyscall,
linux驱动程序概述1.学习方法驱动程序设计模式40%+内核相关知识30%+硬件相关知识30%2.早期设计模式1.每一个应用程序都要写一遍驱动程序。复用性差2.将驱动程序提取出来,多个应用程序调用一个驱动程序。前期设计问题导致的驱动程序改变,全部应用程序都需要变动3.分类字符设备驱动、网络设备驱动、块设备驱动字符设备:以字节为最小单位来访问的设备块设备:访问数
前言生活就是这样,起起落落,你认为的结束也许就是另一片天地的开始。上次我们绘制了元素块,这次就要绘制一个大的东西了,游戏地图,也是游戏中最重要的一部分了,下面来仔细的设计一下。正题一个地图有许多小的元素块组成,介于地图是2D方形的,组织起来比较容易,一个地图由许多块构成,把这些块排列起来就是地图,这里我们多考虑一点,魔塔中,地图块分为地面,和地面上的怪物,所以我把地图设置为两层,一...
/usr/bin/ld: 找不到-lcurl参考文档http://bcoder.com/others/solution-of-usr-bin-ld-can-not-find-lxxx使用上面链接的方法未能解决我的问题,看到 .bashrc 想起了安装交叉编译链的配置文件,于是有下面的尝试,竟解决了【 /usr/bin/ld: 找不到-lcurl 】的问题尝试如果不敢轻易改动环境变量,可以...
具体的推导内容参考以下链接,感谢这位博主的详细推导:https://blog.csdn.net/qiuqchen/article/details/21980731
本章将针对 HTTP 协议结构进行讲解,主要使用 HTTP/1.1 版本。学完这章,想必大家就能理解 HTTP 协议的基础了。2.1、HTTP 协议用于客户端和服务端之间的通信HTTP 协议和 TCP/IP 协议族中众多的协议相同,用于客户端和服务器端互相通信。请求访问资源或则图片等一方叫做客户端,而提供资源的一方叫做服务器端。2.2、通过请求和响应交换的方式达成通信HTTP 协议规定,请求从客户端发出,最后服务端响应该请求并返回结果。请求报文组成结构请求报文是由请求方法、请求 URI、协议
上篇博客中所说的对于表操作的几种限制少分析了触发器。这次从对表设计的角度来着重分析约束和触发器的关系,并进一步扩展比较触发器和存储过程。但在看该篇博客前强烈建议大家好好读下我的上一篇博客《约束与数据库对象规则、默认值的探究》 首先,从图上来比较三者的关系: 触发器不仅能够保证数据的完整性,而且还可以封装复杂的T-SQL逻辑处理语句,在功能上类似于存储过程,所
1.选中你的工程文件2. 右键-properties3.依次选择,然后修改