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

news2024/11/23 1:09:32

       目录

一、指令寻址

二、数据寻址

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(软堆栈)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++错题集(持续更新ing)

Day 1 一、选择题 解析: 在数字不会溢出的前提下,对于正数和负数,有: 1)左移n位,相当于操作数乘以2的n次方; 2)右移n位,相当于操作数除以2的n次方。 解析&#xff1a…

深度盘点在当今经济形势下资深项目经理或PMO的或去或从

在当今经济形势下,资深项目经理(Project Manager)或项目管理办公室(PMO)的去向和选择受到多种因素的影响。以下是对他们可能面临的或去或从的深度盘点: 1、发展去向 1. 深化专业领域:在经济形势…

2024年【制冷与空调设备运行操作】考试内容及制冷与空调设备运行操作考试试题

题库来源:安全生产模拟考试一点通公众号小程序 制冷与空调设备运行操作考试内容是安全生产模拟考试一点通生成的,制冷与空调设备运行操作证模拟考试题库是根据制冷与空调设备运行操作最新版教材汇编出制冷与空调设备运行操作仿真模拟考试。2024年【制冷…

如何实现Linux双网卡同时连接内网和外网的配置?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

快速查看字符对应的ASCII码

1、借助gdb查看 打印字符串用双引号括起来打印单个字符用单引号括起来x 表示十六机制d 表示十进制t 表示二进制 2、借助二进制查看软件 第一步:把要查看的字符保存到文本文件中第二步:借助二进制查看工具(比如:Hex Editor Neo&am…

Windows 10无法远程桌面连接:原因及解决方案

在信息技术日益发展的今天,远程桌面连接已成为企业日常运维、技术支持乃至个人用户远程办公的必备工具。然而,有时我们可能会遇到Windows 10无法远程桌面连接的问题,这无疑会给我们的工作和生活带来诸多不便。 原因分析 1、远程访问未启用&a…

对比测评3款BI分析工具

前不久,一位准备入职阿里的学弟问我,他要做电商数据分析,电商有庞杂的标签、模型、数据和业务逻辑,菜鸟应该要具备什么样的分析能力啊? 我看了他的岗位职责,主要是负责经营决策支持、专题分析和数据看板搭…

智能决策引擎架构设计

智能决策引擎概述 智能决策引擎系统是在大数据支撑下,根据行业专家经验制定规则策略、以及机器学习/深度学习/AI领域建立的模型运算,对当前的业务进行全面的评估,并给出决策结果的一套系统。 一套商业决策引擎系统动辄百万而且需要不断加钱定制,大多数企业最终仍会走上自研…

纯血鸿蒙APP实战开发——Worker子线程中解压文件

介绍 本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压成功后将解压路径返回主线程,获取解压文件列表。 效果图预览 使用说明 点击解压按钮,解压test.zip文件,显…

ASP.NET在线二手交易系统的设计与实现

摘 要 随着当今社会信息技术的进步,基于互联网的各种应用日益受到了人们的重视,二手商品的重新利用也逐渐被人们关注,二手交易系统就在这种形势下产生了,它利用网络,改变了人们的购物方式。 本文是基于现代二手交易…

网络安全护网行动:形式主义还是真有价值?

中国每年都投入大量人力物力进行护网行动,如网络攻防演练、黑客技术研究等。有人质疑这些行动是否只是形式主义,缺乏真正的价值。然而,本文将深入解释这些护网行动的原因,并阐明其对信息安全发展的真实价值。 网络信息安全问题的…

Google Ads被暂停的原因,如何防范?

跨境出海业务少不了需要做Google Ads推广业务;其中让投手们闻风丧胆的消息就是帐户被暂停。当 Google 检测到任何违反其政策且可能损害用户在线体验的行为时,就会发生这种情况。那么如何在做广告推广的同时,保证账号不被封禁呢?看…

学前端网络安全这块还不懂?细说CSRF

什么是CSRF? 举个栗子,比如我们需要在某个博客上删除一个文章,攻击者首先在自己的域构造一个页面,使用了一个img标签,其地址指向了删除博客的链接。攻击者诱使目标用户,也就是博客主访问这个页面&#xff…

Linux系统 的持续学习

昨天学习了目录结构、补充命令和配置网络,其中配置网络用了nat方法,今天学习用桥接方法,通配符、正则表达式的一部分内容。 桥接模式 如果重网卡失败: 1.检查配置文件是否正确 2.检查虚拟器编辑器有没有选对(网卡类…

二进制搭建 k8s 单 Master 集群架构

一、单机 matser 部署环境 mater节点mater01192.168.80.7kube-apiserver、kube-controller-manager、kube-scheduler、 etcdnode节点node01192.168.80.11kubelet kube-proxy docker (容器引擎)node02192.168.80.12kubelet kube-proxy docker &#xff0…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(76)

1. 题目解析 题目链接:LCR 091. 粉刷房子 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 1. 状态定义 在解决这类问题时,我们首先需要根据题目的具体要求来定义状态。针对房屋粉刷问题&#…

《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-02-信息加密技术

文章目录 1. 信息加密技术1.1 数据加密1.2 对称密钥加密算法1)数据加密标准(DES)2)三重DES(Triple-DES)3)国际数据加密算法(IDEA)4)高级加密标准(AES&#xf…

如何管理测试用例?测试用例有什么管理工具?YesDev

3.1 测试用例 测试用例(Test Case) 是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果等。简单地认为,测试用例是为某个特殊目标而编制的一组测试输入、执行条…

STM32 各外设GPIO配置

高级定时器TIM1/TIM8 通用定时器TIM2/3/4/5 USART SPI I2S I2C接口 BxCAN SDIO ADC/DAC 其它I/O功能

【开发】模型部署笔记

目录 模型量化 模型量化 1、模型量化优点 低精度模型表示模型权重数值格式为FP16(半精度浮点)或者INT8(8位定点整数),但是目前低精度往往就指代INT8。常规精度模型则一般表示模型权重数值格式为FP32(32位…