计算机组成结构—寻址方法

       目录

一、指令寻址

二、数据寻址

1.立即寻址

2.直接寻址

3.间接寻址

4.隐含寻址

5.寄存器寻址

6.寄存器间接寻址

 7.基址寻址

8.变址寻址

9.相对寻址

10. 堆栈寻址


 寻址方式是寻找指令或操作数有效地址的方式,也就是指确定本条指令的数据地址,以及下一条将要执行的指令地址的方法。

        寻址方式分为指令寻址和数据寻址两大类。

一、指令寻址

        指令寻址是指寻找下一条将要执行的指令地址。指令寻址方式有两种:一种是顺序寻址方式,另一种是跳跃寻址方式。

  • 顺序寻址:可通过 程序计数器(PC)加1,自动形成下一条指令的地址。

  • 跳跃寻址:通过 转移类指令 实现。跳跃寻址是指下一条指令的地址码不是由 PC 给出的,而是本条指令给出的。

        注意:这里所说的 “ PC 加1 ” 并不是 PC 一定会加 “1” 这个数值,而是要加当前指令占据的地址长度,从而总能得到下一条指令的地址;例如,如果机器按字节编址,当前指令字长是 4 个字节,那么执行这条指令后 PC = PC + 4。

二、数据寻址

        数据寻址是指确定本条指令中所有操作数的地址,即寻找指令要操作的数据的地址。

        指令中的地址字段并不一定代表操作数的真实地址,称为形式地址(A)。结合形式地址和寻址方式,可计算出操作数在存储器中的真实存储地址,这一地址称为有效地址(EA)。

        由于地址字段表达的含义不同,可以有多种不同的寻址方式:比如 直接寻址间接寻址寄存器寻址 等。此外,如果通过将某个寄存器内容与一个形式地址相加而生成有效地址,这种方式称为 偏移寻址。偏移寻址又包括基址寻址变址寻址相对寻址

        数据寻址方式的种类较多,通常在指令中设一个字段,用来指明属于哪种寻址方式。由此可得指令的格式如下:

 

 

        操作码的位数决定了指令的条数,寻址特征和形式地址共同决定了可寻址的范围。

  • 若为立即寻址,则形式地址的位数决定了数的范围。

  • 若为直接寻址,则形式地址的位数决定了可寻址的范围。

  • 若为寄存器寻址,则形式地址的位数决定了通用寄存器的最大数量。

  • 若为寄存器间接寻址,则寄存器字长决定了可寻址的范围。

        下面是常见数据寻址方式的详细介绍。

1.立即寻址

        指令的地址字段指出的不是操作数的地址,而是操作数本身,称为 立即寻址,又称为 立即数寻址。 数据采用补码形式存放。

        上面图中 # 表示立即寻址特征,A 就是操作数本身。

  • 优点:指令在执行阶段不访问主存,指令执行速度快。

  • 缺点:A的位数限制了立即数的范围,只适合操作数较小的情况。

2.直接寻址

        指令格式的地址字段中直接指出操作数在内存中的地址,就称为 直接寻址。即

EA = A

  • 优点:指令简单,不需要专门计算操作数的地址,指令在执行阶段仅访问一次主存。

  • 缺点:A 的位数决定了操作数的寻址范围,操作数的地址不易修改。

3.间接寻址

        间接寻址 是相对于直接寻址而言的,是指指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数地址所在的存储单元地址;也就是 “地址的地址”,即

EA = (A)

        这里用(A)来表示地址为 A 的存储单元所存放的数据。

 

        间接寻址也可以分为多次进行,简称 多次间址。对于两次间接寻址,地址 A 存储的内容 A~1~ 还不是有效地址 EA,地址 A~1~ 对应的存储单元所存储的内容才是 EA。这时可以用存储字的首位来标记间接寻址是否结束:存储字首位为 “1” 时,说明还需要继续寻址;为 “0” 时,寻址结束,当前存储字存放的就是 EA。

  • 优点:可扩大寻址范围(有效地址 EA 的位数大于形式地址 A 的位数);便于编制程序。

  • 缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次间址需多次访存)。

4.隐含寻址

        隐含寻址 是指指令字中不直接给出操作数的地址,而是隐含在某个寄存器中(通过操作码表示)。比如,一地址指令中,对于加法操作就可以只给出一个操作数的地址,而把另一个操作数放在 ACC 中;这时 ACC 就是另一个操作数的地址。

        因为隐含寻址可以省去指令字中的一个地址,所以这种方式可以缩短指令字长,在计算机的指令集中被广泛使用。  

5.寄存器寻址

        寄存器寻址 的指令在执行时所需的操作数来自寄存器,运算结果也写回寄存器;地址码字段直接指出了寄存器的编号,即

EA = R_i

        这样,指令执行期间不需要访问主存,减少了执行时间;而且计算机中寄存器数量是有限的,所以地址字段只需要用很少的二进制位指明寄存器编号即可,节省了存储空间。因此寄存器寻址在计算机被广泛应用。

  • 优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快。

  • 缺点:寄存器的价格昂贵,且数量有限。

6.寄存器间接寻址

        如果寄存器中不是直接给出操作数,而是操作数的内存地址,那么就称为 寄存器间接寻址。即EA = (R_i)

        这是寄存器寻址和间接寻址的结合。跟寄存器寻址相比,指令的执行阶段还需要访问主存;跟间接寻址相比,则可以少一次对主存的访问。

  • 优点:获得操作数地址的速度较快;寄存器编号较短,可有效减少操作数字段的位数。

  • 缺点:寄存器数量有限;指令的执行阶段需要访问主存(因为操作数在主存中)。

 7.基址寻址

        基址寻址 是一种偏移寻址的方式,需要设有基址寄存器 BR ;将基址寄存器 BR 的内容(基地址)加上指令中的形式地址,就可以形成操作数的有效地址。即EA = (BR) + A

        其中基址寄存器既可采用专用寄存器,也可采用通用寄存器。采用专用基址寄存器 BR ,使用时不用明确指出,只需要指令中的寻址特征反映出是基址寻址即可,这是 隐式 基址寄存器;对应地,如果采用通用寄存器,则需要用户明确指出用哪个寄存器作为基址寄存器,这是 显式 基址寄存器。

  • 优点:可扩大寻址范围;有利于多道程序设计和浮动程序编制。

  • 缺点:偏移量(形式地址 A)的位数较短。

8.变址寻址

        变址寻址 和基址寻址极为相似,需要设有变址寄存器 IX;将变址寄存器 IX 的内容加上指令中的形式地址,就可以形成操作数的有效地址。即  EA = (IX) + A

        只要变址寄存器的位数足够,也可以扩大操作数的寻址范围。变址寄存器同样可以采用隐式和显式两种方式。

        不过从本质上讲,变址寻址和基址寻址还是有较大区别的。

  • 基址寄存器是面向 操作系统 的,主要用于为程序或数据分配存储空间,其内容由操作系统或管理程序确定,在程序的执行过程中其值不可变,而指令字中的 A 是可变的;

  • 变址寄存器的内容是由 用户设定 的,在程序执行过程中其值可变,而指令字中的 A 是不可变的。变址寻址主要用于处理数组问题。

        例如,某个数组 a 内有 N 个数据元素,在主存中存放的首地址为 D。那么如果要对数组所有元素求和,可以通过直接寻址的方式依次叠加得到结果,写成汇编语言程序如下:

        随着 N 的增大,程序的指令条数会越来越多,占据的存储空间也越来越大。

        而如果使用变址寻址,只需要将数组元素的索引下标放入变址寄存器中,每次改变变址寄存器的内容(加 1),就能用同样的指令 “ ADD X, D ” 处理所有所有数的相加了。

        利用一个条件转移指令(BNE),当变址寄存器 X 中内容还没有增大到 N 时,就跳转回 M 处再次执行相同的指令;当增大到 N 时就结束,得到最后结果。这样,不论 N 取多大,这段程序都只需用 7 条指令,所占存储单元大大减少。这其实就是 “循环” 的实现思路。

  • 优点:可扩大寻址范围;在循环体中将 A 设为数组初始地址,可实现数组功能;适合编制循环程序。

9.相对寻址

        相对寻址 也是偏移寻址的一种,它所基于的是 程序计数器 PC 。将 PC 的内容加上指令中的形式地址,就形成操作数的有效地址,即EA = (PC) + A

        相对寻址通常用于转移类指令,转移后的的目标地址与当前指令有一段距离,称为 相对位移量;这里就是形式地址 A ,所以 A 也称为 位移量。A 的位数决定了操作数的寻址范围,可正可负,用补码表示。

 

        相对寻址的最大特点是转移的目标地址不固定,可以随 PC 的值变化;这样,无论程序加载到主存的哪段区域,都以正确运行,对于编写浮动程序非常有利。例如,之前计算数据和的程序,跳转的目标地址固定为 M;如果程序的首地址发生了改变,M 也会变化。可以将条件转移指令改为相对寻址:    

        这样,无论程序浮动到哪一地址空间,都可以正常运行了。另外,相对寻址也可以和间接寻址结合使用。

  • 优点:便于程序浮动,广泛应用于转移指令。

10. 堆栈寻址

        堆栈寻址 要求计算机中设有堆栈。堆栈既可以用寄存器组来实现,称为 硬堆栈;也可以利用主存的一部分空间作为堆栈,称为 软堆栈

        以软堆栈为例,可以用一个 堆栈指针 SP (Stack Pointer)指出栈顶地址,也可以用 CPU 中的寄存器作为 SP。根据栈数据结构的特点,操作数只能在栈顶指针指向的存储单元里存取。

 

        可以看出,堆栈寻址也是一种 隐含寻址,操作数的地址被隐含在了 SP 中。而从本质上看,把 SP 看作存放有效地址的寄存器,堆栈寻址就是一种 寄存器间接寻址

        堆栈有 进栈(PUSH)出栈(POP)两种操作:

  • 进栈(PUSH A):(SP)- 1 → SP;(ACC)→ M [ (SP) ]

  • 出栈(POP A): (M [ (SP) ])→ ACC;(SP)+ 1 → SP

        上面讨论的,都是主存按字编址的情况。如果主存按字节编址,则每次进出栈时 SP 的变化 Δ 会受到存储字长的影响;如果存储字长为 2 字节(16 位)则 Δ = 2,为 4 字节则 Δ = 4。


        下表列出了所有寻址方式、有效地址及访存次数的简单总结(不含取本条指令的访存)。

寻址方式有效地址 EA访存次数
立即寻址不需要0
直接寻址EA = A1
间接寻址EA = (A)2(一次间址)
隐含寻址隐含在寄存器中0
寄存器寻址EA = Ri0
寄存器间接寻址EA = (Ri)1
基址寻址EA = (BR) + A1
变址寻址EA = (IX) + A1
相对寻址EA = (PC) + A1
堆栈寻址EA = (SP) - 1 (入栈) 或 EA = (SP) (出栈)0(硬堆栈)或 1(软堆栈)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/628993.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IP-GUARD如何制作授权软件

1、进入控制台 -> 找到文档安全管理 -> 点击授权软件管理 -> 导出授权软件(名称自定义) 2、打开这个蓝宝石工具,并将导出的文件进行打开 选择你要操作的软件进行编辑,然后一直下一步 3、选择要操作的软件进行编辑

MIRO时,修改页签“采购订单参考”的数量时,金额不自动计算

MIRO 发票校验时,进入到如下界面,系统参考采购订单自动带出已经收货的金额和数量。 此时如果想要修改数量时,有些用户账号下,金额不自动计算,但是有些用户账号下,数量更改时,系统自动计算和建议…

在Ubuntu22.04搭建xfce远程桌面

由于Ubuntu22.04云服务器(带GPU)只开放部分端口,某些服务(如nacos)有Web前端需要访问,但是相应的端口并没有开放,只有SSH端口可以使用。于是,就在Ubuntu22.04上安装xfce桌面环境&…

静态IP地址:网络通信的稳定之锚

在数字化时代,网络通信是企业运营和个人生活不可或缺的一部分。而在这个过程中,IP地址扮演着至关重要的角色。静态IP地址,作为一种特殊的网络配置,为网络通信提供了稳定性和可靠性。本文将从五个方面深入探讨静态IP地址的重要性、…

asp.net 齿轮加工车间生产管理系统-计算机毕业设计源码56014

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,在现实运用中,为方便用户能够可以随时进行在线…

中途离开项羽投奔刘邦的那些名将谋臣,最后的结果怎么样?

刘邦夺取天下后,说:我自己没什么能力,之所以击败项羽,都是大家的功劳。带兵横扫强敌,我不如韩信;筹措粮草物资,源远不断地给前线供应粮饷,我不如萧何;坐在帐中&#xff0…

UDP多对多组播通信

广播和多播仅应用于UDP。TCP是一个面向连接的协议,TCP一定是点对点的,一点是两个主机来建立连接的,TCP肯定是单播。只有UDP才会使用广播和组播。 如下示例实现一个UDP多对多的组播通信,进程中有收、发两个线程,分别表…

React渲染流程

在 React 渲染分为两个阶段,Render 和 Commit,Render 是修改 React 组件的状态,把需要更新的组件标记为待更新,在 Commit 阶段将待更新的组件进行渲染并最终更新到浏览器的 Dom 树中。 Render 阶段是可以并执行操作的&#xff0c…

【MySQL】表的增删改查 | CRUD | 新增 | 查询 | 修改 | 删除 | 数据库约束

文章目录 表的增删改查一、CRUD1.新增(Create)1.插入多行2.指定列多行插入3.插入datetime类型4.插入当前时间5.插入查询的结果 2.查询(Retrieve)1.全列查询 *2.指定列查询3.查询字段为表达式4.指定别名 as5.去重 distinct6.排序 o…

Excel提取某一列的唯一值

点击【筛选】(【高级筛选】),参数里: 列表区域:为需要选择唯一值的那一列复制到:生成唯一值的目标区域 据说新版本的excel有了unique()函数,可以很快捷的选择某一列的唯一值,但是博…

大模型时代下的先行者:景联文科技引领数据标注新时代

在大模型时代,数据标注不再是简单的分类标注,而是一项融合了技术革新、专业技能、法律合规和精细化管理的综合性任务,对推动AI技术的发展和落地应用具有重要意义。 景联文科技作为AI基础行业的数据供应商,可协助人工智能企业解决整…

记录一下自己的宏碁暗影骑士电脑的属性

TOC 前言 没有前言。 参考博文 怎么查自己电脑服务器信息吗,如何查看自己电脑的服务器 一、cmd 看到服务器型号 wmic csproduct get name查询CPU个数 按照博主的方法,我出现了报错。 在 Windows 上,您可以通过 PowerShell 来执行类似的操作。您可以…

测缝计测量的是实际缝宽吗?

在土木工程中,测缝计作为一种重要的监测工具,广泛应用于桥梁、隧道、大坝等大型结构中,用以测量和监控结构接缝或裂缝的实际宽度变化。然而,有些人可能会产生疑问:测缝计测量的是实际缝宽吗?本文将对这一问题进行深入…

QCheckBox样式表qss实现状态切换显示不同图标(含第三状态:半选状态)

QCheckBox实际上支持三种状态:选中、未选中、半选 本文介绍如何使用qss实现这三种状态的样式,设置各状态的勾选框图标 需要调用setTristate(true)函数开启第三状态,默认是只有两种状态的。 网上百度很容易找到选中和未选中的qss样式&#…

基于Nios-II实现流水灯

文章目录 一、新建项目1、选择芯片2、Qsys设计2.1、点击Platform Designer2.2配置软核2.3其他设置 3、Quartus设计3.1添加原理图3.2添加qip文件3.3其他设置3.4驱动设置 4、Nios-II Eslipse设计参考 一、新建项目 使用的Quartus 18.0及以上版本 1、选择芯片 2、Qsys设计 2.1、点…

MT3037 新月轩就餐

思路: 此题每道菜的价钱相同,想最小化付的钱即求最小区间长度可以满足“品尝到所有名厨手艺”。 使用双端队列存储元素,队尾不断向后遍历:头->尾 如果队头队尾,则队头往右移一格,直到区间不同元素数m…

自学C语言能达到什么境界呢?

C 语言是一门广泛应用于系统软件、嵌入式系统、游戏开发等领域的编程语言。那么,通过自学 C 语言,能够达到什么样的境界呢? 就像学习小提琴一样,仅凭自学也可以达到一定的水平,能够自娱自乐,在亲友聚会时表…

xxljob分片广播+多线程实现高效定时同步elasticsearch索引库

需求:为了利用elasticsearch实现高效搜索,需要将mysql中的数据查出来,再定时同步到es里,同时在同步过程中通过分片广播多线程提高同步数据的效率。 1. 添加映射 使用kibana添加映射 PUT /app_info_article {"mappings&quo…

AutoNeRF:Training Implicit Scene Representations with Autonomous Agents

论文概述 《AutoNeRF》是由Pierre Marza等人撰写的一篇研究论文,旨在通过自主智能体收集数据来训练隐式场景表示(如神经辐射场,NeRF)。传统的NeRF训练通常需要人为的数据收集,而AutoNeRF则提出了一种使用自主智能体高效…