(计算机组成原理)指令的寻址方式

2023-11-04

指令寻址方式是指指令或者操作数有效地址的寻找方式,主要分为数据寻址和指令寻址。指令的地址码字段往往并不是操作数的真实地址,而是形式地址,用A表示,(A)即操作数形式地址所指向的存储介质的数值。用形式地址结合指令的寻址方式可以计算出操作数的真实地址,称为有效地址用EA表示,(EA)即表示有效地址所指向存储介质的数值,亦即操作数。如果此时存在EA=(A),表示形式地址A所指向的存储介质中的数值,就是操作数的有效地址,(EA)是真正的操作数。


数据寻址和指令寻址

程序被启动时,程序所包含的指令和数据都被装入到内存中。在程序指令过程中,需要取指令和操作数,确定指令存放位置的过程称为指令寻址确定操作数存放位置的过程称为数据寻址

指令寻址

找到下一条将要执行指令的地址,称为指令寻址。指令基本上按执行顺序存放在主存中,执行过程中,指令总是从内存单元被取到指令寄存器IR中。

一般来说,指令寻址只有两种方式:顺序执行时,用指令计数器(PC)+‘1’来得到下一条指令的地址;跳转执行时,通过转移指令的寻址方式,计算出目标地址,送到PC中即可。目标转移地址的形成方式主要有3种:立即寻址(直接地址),相对寻址(相对地址),间接寻址(间接地址)。

顺序寻址可通过程序计数器(PC)加1,自动形成下一条指令的地址,1->2->3 ,7->8都属于顺序寻址。

数据寻址

找到当前正在执行指令的数据地址,称为数据寻址。开始时数据被存放在内存中,但在执行过程中,内存的数据可能被装入到CPU寄存器中,或者内存的堆栈区中;还有操作数可能是I/O端口中的内容,或本身就包含在指令中(立即数)。另外运行的结果也可能要被运送到CPU的寄存器中,堆栈中等等,所以数据的寻址要涉及对寄存器,内存单元,堆栈,I/O,立即数的访问。此外操作数可能是某个一维数组或者二维数组的元素,因此还要考虑如何提供相应的寻址方式,以方便找到数组元素。综上所述数据寻址要比指令寻址麻烦的多。为了区分不同的方式,在指令字中通常设一个字段,用来指明属于何种寻址方式。


常见的数据寻址方式 

绝大多数情况下,地址码字段通常都不代表操作数的真实地址,而是形式地址,寻址方式就是将形式地址转换成真实地址,设置多种寻址方式是为了各种不同程序的需要。

α.立即寻址

如果形式地址是立即数,则表明该数是操作数,不需要给出地址去其他地方找操作数。A不是操作数地址,而是操作数本身。

通常把‘#’符号放在立即数前面,以表示该寻址方式为立即寻址如#20H。

优点:只需取出指令即可立即获得操作数。采用立即寻址特征的指令只需在取指令时访问存储器,而在执行阶段不必再访问存储器。

缺点:由于A表示的就是立即数,因此A的位数限制了立即数的表示范围,例如A占8位,则立即数的表示范围为‘-128~127’(立即数都是由补码表示)

用途:1)若需要一个循环次数(如for 循环的循环次数)給某专用寄存器,则可以使用立即寻址直接将循环次数作为立即数送入。

           2)若需要将某程序的首地址送入程序计数器中,而且程序的首地址可以看成时一个操作数,则可以使用立即寻址直接将该程序的首地址作为立即数送入。

立即寻址方式通常用于对某寄存器或内存单元赋值

β.直接寻址

若形式地址为实际地址即可直接寻址

数据直接寻址与指令直接寻址一样,可将有效地址EA=A 。

优点:寻找操作数简单,因为直接给出了操作数的有效地址,不需要经过其他变换。

缺点:操作数的有效地址仅由A决定,而A的位数一般都比较小,因此寻址范围比较小。

γ.隐含寻址

隐含寻址指指令中不明显给出操作数地址,其操作数地址隐含在操作码或者某个寄存器中。其中最典型的例子就是一地址格式的加法指令 ↓。

 操作码显示ADD,说明有两个操作数进行运算,而地址只给出了一个操作数地址,另一个操作数隐藏在ACC中,这就是隐含寻址。

δ.间接寻址

直接寻址的地址码字段A的位数较小,因此寻址范围较小,间接寻址可以解决这个问题;直接寻址是直接给出了操作数的有效地址,即直接可以通过该地址找到操作数。间接寻址分为一次间接寻址和多次间接寻址。

一般来说,指令字长等于存储字长。作为一条指令,首先要有操作码,既然有操作码就要占位数,要占位数说明A的位数肯定小于指令字长,而有效地址EA在主存中,和指令字长的位数一样大,那么EA所能表示的寻址范围就更大了。

假设指令字长和存储字长都是16位,其中A为8位,显然直接寻址范围为2^{8},而a)中一次间接寻址的寻址范围可以达到2^{16 }。 而如果是多次间接寻址,就达不到2^{16},如b)需要使用第一位标注寻址是否结束,故寻址范围为2^{15}

优点:便于子程序返回和查表。

缺点:很明显,一次间接寻址在指令执行阶段还需要访问两次存储器(一次取操作数的有效地址,一次取操作数),而N次间接寻址却需要访问存储器N+1次。

间接寻址用途:I/O系统中断中讲到寻找中断服务程序入口就是使用间接寻址。

ε.寄存器寻址

寄存器寻址比较简单,基本和直接寻址类似。在直接寻址的指令字中,地址码字段给出的是主存的地址,而在寄存器寻址的指令字中,地址码字段直接给出了寄存器编号R_{i},则操作数的有效地址EA=R_{i},如下图

 

 优点:1)由于操作数在寄存器中,因此指令在执行阶段不需要访存,即减少了执行时间。

            2)减少了指令字的长度;例如假设有2^{7}=128条指令,7bit + 27bit + 27bit + 27bit + 27bit = 155bit 。如果使用了寄存器寻址,一个操作数的地址就不需要27位,因为给出的是寄存器号,即使计算机中有1024个寄存器,一个操作数的地址也仅仅需要10位表示即可,所以可以大大地减少指令字的长度。

ζ.寄存器间接寻址

间接寻址明白了,寄存器间接寻址基本就跳过了。和寄存器寻址的不同之处在于,R_{i}的内容不是操作数,而操作数所在主存单元的地址号,即有效地址EA=\left ( R_{i} \right )

优点:便于编制循环程序。

缺点:对于直接寻址和间接寻址来说不是缺点,对于寄存器寻址来说是一个小小的缺陷,因为寄存器间接寻址需要访问一次存储器去取操作数。

η.基址寻址 

基址是什么?字面意义就是操作数的有效地址需要通过某个基础地址来形成。需要设置一个基址寄存器(BR),其操作数的有效地址EA等于指令字中的形式地址A与基址寄存器中的内容相加。

                                                        EA=A+\left ( BR \right )

a)采用专用寄存器BR作为基址寄存器                                b)采用通用寄存器作为基址寄存器

优点:1)扩大操作数的寻址范围

           2)便于解决多道程序问题

注意:基址寄存器的内容由操作系统确定,在程序执行过程中不能由用户随意改变;

           虽然基址寄存器的内容不可以由用户改变,但是当采用通用寄存器组来作为基址寄存器时,用户有权知道到底使用哪个通用寄存器来作为基址寄存器。

θ.变址寻址

变址寻址与基址寻址相似度90%。

a)采用通用寄存器作为变址寄存器                                  b)采用专用寄存器IX作为变址寄存器

变址寻址的有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加

        EA=A+\left ( IX \right )

注意:在变址寻址中,变址寄存器的内容是由用户设定的,在程序执行过程中其值可变,而指令字中的形式地址A时不可变的,这点恰好和基址寄存器相反。

优点:1)扩大操作数的寻址范围(前提是变址寄存器的位数大于形式地址A的位数)

           2)适合处理数组问题和循环程序

基址寻址与变址寻址的区别:两种方式有效地址的形成都是寄存器内容+偏移地址,但在基址寻址中,程序员操作的是偏移地址,基址寄存器的内容由操作系统控制,在执行过程中时动态调整的;在变址寻址中,程序员操作的是变址寄存器,偏移地址时固定不变的。

λ.相对寻址

基址寻址,变址寻址,相对寻址都可以看成时偏移寻址。相对寻址基于程序局部性原理。相对寻址的有效地址是将程序计数器(PC)的内容与指令字中的形式地址A相加而成:EA=\left ( PC \right )+A

 从图中可以看出,操作数的位置与当前指令的位置有一个相对的距离。

相对寻址用途一:用于转移类指令。转移后的目标地址与当前指令有一段距离,称为相对位移量,此位移量由指令字的性质地址给出,故A称位位移量。

相对寻址用途二:便于编制浮动程序。

寻址方式 有效地址计算方式 用途及特点
立即寻址 通常用于给寄存器赋值
直接寻址 EA=A
隐含寻址 缩短指令字长
一次间接寻址 EA=\left ( A \right ) 扩大寻址范围,易于完成子程序返回
寄存器寻址 EA=R_{i} 指令字较短;指令执行速度较快
寄存器间接寻址 EA=\left ( R_{i}\right ) 扩大寻址范围
基址寻址 EA=A+\left ( BR \right )

扩大操作数寻址范围;适用于多道程序

设计,常用于为程序或数据分配存储空间

变址寻址 EA=A+\left ( IX \right ) 主要用来处理数组问题
相对寻址 EA=A+\left ( PC \right ) 用于转移指令和程序浮动

先间接寻址

再变址寻址

EA=\left ( A \right )+\left ( IX \right )

先变址寻址

再间接寻址

EA=\left ( A+\left ( IX \right ) \right )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(计算机组成原理)指令的寻址方式 的相关文章

  • 电脑壁纸链接

    电脑壁纸链接 一 壁纸网站 1 彼岸图网 2 H128壁纸 3 Wallhaven 4 Wallhere 二 游戏壁纸 英雄联盟 神泣 鬼泣 女神联盟2 崩坏3 三国杀 QQ飞车 QQ炫舞 阴阳师 幻塔 王者荣耀 逆战 上古王冠 永恒魔法
  • 虚拟化与网络存储技术

    虚拟化技术简介 一 常见的虚拟化技术分类 1 CPU虚拟化 CPU的虚拟化技术是一种硬件方案 支持虚拟化技术的CPU带有特别优化过的指令集来控制虚拟过程 通过这些指令集 VMM会很容易提高性能 2 服务器虚拟化 服务器虚拟化能够通过区分资源
  • arcgis 10.8 for win10安装教程

    本文主要记录arcgis安装步骤 遇到的问题等 文章目录 一 前提 二 下载与安装 1 下载 2 安装 参考资料 一 前提 下载前需要确定 1 ArcGIS对系统的要求 安装之前系统需安装 net framework 4 5 以上版本 我的
  • 形象易懂讲解算法II——压缩感知

    形象易懂讲解算法II 压缩感知
  • 修改照片尺寸25mm*35mm

    打开方式 画图 gt 调整图片大小 选择像素 gt 修改为295 413即可
  • App\led\led.h(6): warning: #1295-D: Deprecated declaration LED_Init - give arg types

    如图所示操作即可 如图所示操作即可 如图所示操作即可
  • BSD、Apache、MIT、GPL、LGPL几种常见的开源协议

    转载地址 https www cnblogs com Vito2008 p 4806677 html 1 BSD开源协议 original BSD license FreeBSD license Original BSD license B
  • Flutter踩坑笔记一——环境搭建的坑

    Flutter的环境搭建其实还是很简单的 当你把AndroidStudio升级安装3 5版本的时候 他已经默认为你安装了Dart和Flutter插件 可见Google对flutter的重视 所以也省了我们不少事儿 首先 打开 官方文档 获取
  • 第一篇博--初入CSDN

    选择开博并计划按月定期发布一些敲码路上的收获和心得 目的是在梳理知识 复盘总结的同时 能够和志同道合的朋友们一起学习 共同进步 在互联网上留下一份自己的痕迹 与诸君共勉 联系方式 631435743 qq com 欢迎大家找我讨论计算机专业
  • C# Socket连接请求超时处理

    在Socket的超时时间默认20多秒 而实际连上不需1秒时间 20多秒很多时候用户是不能接受的 而在等待返回结果的这段时间里程序会处于停止响应状态 废话不多说了 先上代码 private delegate string ConnectSoc
  • 碎碎念之工作②

  • TVS管电路原理图符号及选型举例

    TVS管的电路原理图符号与稳压二极管符号类似 结构也都差不多 了解TVS管的电路原理图符号是掌握TVS管符合选型的基础 一般常见的TVS管电路原理图符号有 VBR IPP IR VRWM VC PM CP VBR代表的是 击穿电压 IPP代
  • 【Android Studio】Design editor is unavailable until next gradle sync.如何解决?

    Design editor is unavailable until next gradle sync 如何解决 打开一个网上开源的下载文件 在查看安卓页面布局 也就是控件布局时 会出现一个bug Design editor is unav
  • GNURadio报错Unable to create context(windows10环境)

    GNURadio报错Unable to create context windows10环境 这里本人使用的是GNU Radio3 7 11 iiosupport win64 版本 外设是ADI的ADALM PLUTO 这里本人使用的是GN
  • 已经设置了端口映射但是外网还是访问不了服务器

    来自于 http www tp link com cn pages article detail asp result faq d 31 已经设置了端口映射但是外网还是访问不了服务器 1 首先检查您设置的端口影射是否正确映射到您内网的服务器
  • PTP/IP协议

    PTP IP PTP over IP 是一个通过IP连接 建立在 Picture Transfer Protocol PTP 上的传输层 我之所以在了解这个东西是因为有一台 Nikon 相机支持 WLAN 和手机传输相片 但是APP设计得极
  • GitHub Action入门简介

    1 What is GitHub Actions GItHub Actions是一个持续集成和持续交付的平台 能够让你自动化你的编译 测试和部署流程 GitHub 提供 Linux Windows 和 macOS 虚拟机来运行您的工作流程
  • FL Studio2024水果编曲软件21.2.0中文版本下载更新

    FL Studio2024是功能强大的音乐制作解决方案 使用旨在为用户提供一个友好完整的音乐创建环境 让您能够轻松创建 管理 编辑 混合具有专业品质的音乐 一切的一切都集中在一个软件中 只要您想 只要您需要 它总能满足您的音乐需求 工具方面
  • CleanMyMac X2024值不值得下载?

    macOS已经成为最受欢迎的桌面操作系统之一 它提供了直观 简洁的用户界面 使用户可以轻松使用和管理系统 macOS拥有丰富的应用程序生态系统 还可以与其他苹果产品和服务紧密协作 如iPhone iPad 用户可以通过iCloud同步和共享
  • FAM amine, 6-isomer,1313393-44-0,含有纯6-异构体的荧光团,6-FAM NH2

    产品名称 FAM amine 6 isomer 6 FAM NH2 中文名称 6 羧基荧光素 氨基 CAS 1313393 44 0 分子式 C27H26N2O6 分子量 474 51 纯度 95 结构式 产品描述 荧光素衍生物具有胺基 含

随机推荐

  • 20行代码实现人脸检测

    如今 刷脸 已经成为人们生活中的日常 刷脸支付 人脸解锁 门禁等 都运用了人脸识别技术 人脸识别技术已广泛应用于金融 司法 公安 教育 医疗等诸多领域 同时也涌现出如 旷视科技 商汤科技等一批优秀的企业 人脸识别算法主要分为三个流程 人脸检
  • DNF类游戏动作实现(C语言)

    没有接触制作小游戏前 感觉做游戏很不可思议 游戏里的人物是怎么移动的 怎么攻击 释放技能 现在逐渐了解到之后 发现2d游戏人物的动作更多是图片的拼接 动作是否精细 由这个动作的帧数决定 这篇博客会简单实现2d人物的动作 效果如下 2d人物动
  • rnn pytorch_pytorch介绍rnn字符级文本生成

    rnn pytorch Today we ll continue our journey through the fascinating world of natural language processing NLP by introdu
  • MySQL可见_MySQL 8.0新特性 -- 不可见索引

    MySQL支持不可见索引 即优化器不会使用该索引 不可见索引特性不可以用于主键 默认索引是可见的 可以在create table create index alter table操作中使用关键字visible invisible来指定索引是
  • Python之整型

    1 python中一切都是对象 因此python中其实根本不存在int float这些类型 2 int其实是一个python对象 3 整数类型 int 在python中实际是上长整型 理论是可以存储无限大小的整型数 正数负数和0 一 int
  • linux杀死进程的五种方法

    方法一 Terminal终端输入 gnome system monitor 就可以打开system monitor 如图 然后找到相应进程 右击选择kill process就可以了 方法二 通过kill 进程id的方式可以实现 首先需要知道
  • 目标跟踪序列化测试以及搜参

    1 序列化测试 对于一些跟踪算法 特别是siamese系列 一般进行20epochs的训练 对应20个训练模型 特别是backbone解冻的后10个模型 均有可能出现最好的结果 got 10k与lasot的结果一般容易出现在10 15 ot
  • 第三章:primitive主数据类型和引用-认识变量

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 第三章 primitive主数据类型和引用 认识变量 认识变量 变量有两种 primitive 简单的 主数据类型和引用 目前我们已经使用过变量的地方 对象的状态 i
  • 没有用到React,为什么我需要import引入React?

    没有用到React 为什么我需要import引入React 本质上来说JSX是React createElement component props children 方法的语法糖 所以我们如果使用了JSX 我们其实就是在使用React 所
  • 【华为OD机试真题 python】快递运输

    题目描述 运送的快递放在大小不等的长方体快递盒中 为了能够装载更多的快递同时不能让货车超载 需要计算最多能装多少个快递 注 快递的体积不受限制 快递数最多1000个 货车载重最大50000 输入描述 第一行输入每个快递的重量 用英文逗号隔开
  • 小爱控制HA上的开关(红外线)

    小爱同学控制homeassistant in 树莓派 by 红外线 前言 租了房子以后一直想搞智能家居自动化各种事情 最近终于腾出空可以搞辣 研究了一圈感觉拆开关太麻烦了 零火线还要撬开关 租的房子不敢瞎搞 想了一下可以用arduino 树
  • VMware Workstation 入门使用

    文章目录 名词解释 事先准备 安装 VMware Tools 将鼠标焦点从虚拟机中退出 共享剪切板 共享文件 夹 虚拟机为 Windows 虚拟机为 Linux 虚拟机快照的创建与加载 创建虚拟机快照 加载虚拟机快照 克隆虚拟机 构建宿主机
  • 【ztree应用】基于jquery实现带检索功能的ztree文件夹折叠效果(附源码下载)

    文章目录 写在前面 涉及知识 效果展示 1 搭建dom 2 引入ztree和jquery 3 实现搜索功能及调用 4 源码分享 1 百度网盘 2 123云盘 3 邮箱留言 总结 写在前面 前些日子 领导要求做一个关于数据库管理的工具 主要想
  • 循环点击链接selenium模拟

    https blog csdn net qq 43251443 article details 82819887转载
  • 私有地址和保留地址

    A类 10 X X X是私有地址 私有地址就是在互联网上不使用 而被用在局域网络中的地址 127 X X X是保留地址 用做循环测试用的 B类 172 16 0 0 172 31 255 255是私有地址 169 254 X X是保留地址
  • 深度学习进阶线路图

    研究动态 深度学习进阶线路图 一 在应用机器学习的时候 最耗时和重要的阶段是对原始数据进行特征提取 深度学习是一个新的机器学习的分支 他要做的就是跨过整个特征设计阶段 而是直接从数据中学习得到 大部分的深度学习方法都是基于神经网络的 在这些
  • Git命令大全

    Git命令大全 一 git config 二 git clone 三 git init 四 git status 五 git remote 六 git branch 七 git checkout 八 git add 九 git commit
  • 区块链技术对金融行业有什么冲击?

    区块链技术在经过了长达十年的发展 被越来越多的行业关注 特别是一些大型企业 对区块链技术还进行了深入的研究 区块链技术也在更多的领域被应用 区块链技术的热度虽然很高 但目前的发展还处在初级阶段 其过多的应用场景也是没有得到更大的发展 区块链
  • 蓝桥杯练习系统入门水题

    好几天没写代码了 上蓝桥杯的练习系统看了一下 做了四道巨水题之后发现有些题还要vip 无语 问题描述 Fibonacci数列的递推公式为 Fn Fn 1 Fn 2 其中F1 F2 1 当n比较大时 F
  • (计算机组成原理)指令的寻址方式

    指令寻址方式是指指令或者操作数有效地址的寻找方式 主要分为数据寻址和指令寻址 指令的地址码字段往往并不是操作数的真实地址 而是形式地址 用A表示 A 即操作数形式地址所指向的存储介质的数值 用形式地址结合指令的寻址方式可以计算出操作数的真实