4-2指令系统-指令的寻址方式

news2024/11/16 5:39:48

文章目录

  • 一.指令寻址
    • 1.顺序寻址
    • 2.跳跃寻址
  • 二.数据寻址
    • 1.隐含寻址
    • 2.立即(数)寻址
    • 3.直接寻址
    • 4.间接寻址
    • 5.寄存器寻址
    • 6.寄存器间接寻址
    • 7.相对寻址(程序浮动、转移指令)
    • 8.基址寻址(多道程序)
    • 9.变址寻址(循环程序、数组问题)
    • 10.堆栈寻址

一.指令寻址

1.顺序寻址

通过程序计数器(PC)加1,自动生成下一条指令的地址。对于变长指令字结构等情况PC+n,也属于顺序寻址

2.跳跃寻址

通过转移类指令实现,是否跳跃受到状态寄存器和操作数的控制。

跳跃的地址分为
绝对地址:由标记符直接得到
相对地址:相对于当前指令地址的偏移量

(详见上一节↓)
在这里插入图片描述
如OP为JMP,地址码为7,此时PC的值将改为7,CPU根据PC的值指向指令7

二.数据寻址

确定本条指令的地址码指明的真实地址(如起始地址为100,OP为JMP,地址码为7,则真实地址为107而不是7)

一地址指令结构(操作码,寻址特征,形式地址A)
①寻址特征表示使用以下的哪种寻址方式
②确定了使用哪种寻址方式,再结合形式地址A,即可得到操作数的真实地址(也称有效地址EA)
在这里插入图片描述
二地址指令结构(操作码,寻址特征,形式地址A1,寻址特征,形式地址A2),需要为每个形式地址指明它的寻址特征
在这里插入图片描述

以下假设指令字长=机器字长=存储字长,希望找到的操作数是3

1.隐含寻址

不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。如ACC中的操作数不需要指令指出。

优点:有利于缩短指令字长
缺点:需增加存储操作数或隐含地址的硬件

2.立即(数)寻址

待找的操作数直接被放在指令中,即形式地址A就是操作数本身,又称为立即数,一般采用补码形式。寻址特性为“#”的表示立即寻址。

在这里插入图片描述
执行一条指令需要在取指令时访存1次

优点:指令执行阶段不需要访问主存,执行时间最短
缺点:A的位数限制了立即数的范围

3.直接寻址

EA=A,LDA为取数指令
在这里插入图片描述
一条指令的执行共需要2次访存:取指令、执行指令

优点:实现简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点:A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改。

4.间接寻址

(1)一次间址
A中存放的是EA,即EA=(A)
一条指令的执行需要3次访存:取指令1次+执行指令2次
在这里插入图片描述
(2)两次间址
存储单元第一个比特位是1需要继续寻找,为0表示后面就是EA
共需要4次访存:取指令1次+指令执行3次
在这里插入图片描述
可以看出,n次间址的访存次数:1+(n+1)=n+2次

优点:可扩大寻址范围(有效地址EA的位数可以大于形式地址A的位数);便于编制程序(用间接寻址可以方便地完成子程序返回)
缺点:指令在执行阶段要多次访存,多次寻址需根据存储字的最高位确定几次访存

5.寄存器寻址

寄存器中存放操作数。直接给出操作数所在的寄存器编号Ri,即EA=Ri

一条指令的执行需要在取指令时访存1次

优点:指令在执行阶段不访问主存,只访问寄存器;指令字短且执行速度快,支持向量/矩阵运算。
缺点:寄存器价格昂贵,计算机中寄存器个数有限。
在这里插入图片描述

6.寄存器间接寻址

寄存器中存放操作数的地址。寄存器Ri指向的是操作数所在主存单元的地址,即EA=(Ri)

一条指令的执行需要2次访存:取指令1次+指令执行1次

特点:比一般间接寻址相比速度快,但指令的执行阶段需要访问主存

在这里插入图片描述

7.相对寻址(程序浮动、转移指令)

相对于下一条指令的偏移。取出当前指令后,PC指向下一条指令,再以PC作为起点,EA=(PC)+A
A可以看做是所指地址的偏移量,可正可负,通常用补码表示。

在这里插入图片描述
若程序的起始地址为M,OP为JMP的主存地址为M+3,对应地址码为0(指向第一条指令)。执行完JMP后PC指向M+4,为了保证跳转到第一条指令(即M)而不是跳转到主存地址为0的地址,需要将OP为JMP对应的地址码A的值改为-4,利用相对寻址,EA=(PC)+A=M+4+(-4)=M。因此,我们可以随意挪动代码段,A的值-4一定能让程序跳转回第一条指令(M),即这段代码在程序内浮动时不用再更改跳转指令的地址码

为了防止经常挪动代码造成数组元素的存放地址被频繁修改,可以将程序段和数据端分开存放

优点:便于程序浮动(一段代码在程序内部的浮动)、广泛应用于转移指令

8.基址寻址(多道程序)

以程序的起始存放地址作为起点,即EA=(BR)+A

BR叫做基址寄存器,基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。

优点:
①可扩大寻址范围:基址寄存器的位数通常大于形式地址A的位数
②用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计:主存中可能同时多个程序的数据,每个程序的起始存放位置不同。程序运行前,CPU的基址寄存器都会修改为当前运行程序的起始存放地址,通常存放在PCB中
③便于程序浮动(整段程序在内存中的浮动):程序可以在主存中以任意位置开始存放

在这里插入图片描述

也可采用通用寄存器来代替基址寄存器。R0指明基地址存放在哪个寄存器中,此图中EA=(R0)+A
在这里插入图片描述

9.变址寻址(循环程序、数组问题)

程序员自己决定从哪里作为起点,即EA=(IX)+A

IX叫做变址寄存器,同样,也可用通用寄存器作为变址寄存器

变址寄存器是面向用户的,变址寄存器的内容可由用户改变(即改变IX),而形式地址A不变。因此可以看成A作为基地址,IX作为偏移量。

在这里插入图片描述
[例]

for(int i=0;i<10;i++){
	sum+=a[i];
}

通常情况下需要逐个执行
在这里插入图片描述
可以使用变址寻址实现for循环进行优化
将立即数0放到ACC、IX中,EA=(IX)的0+A的7=7指向a[0],IX+1对应for循环的i++,作差比较小于0,因此仍满足for循环条件。跳转回主存地址2,EA=(IX)的1+A的7=8指向a[1],和a[0]相加存ACC,以此类推。

在这里插入图片描述
可以看出,在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器Ⅸ的内容,就可以很容易形成数组中任一数据的地址。因此变址寻址特别适合编制循环程序。

若上述程序不是从0号主存地址开始存放的,则需要结合基址寄存器BR的值得到EA,即EA=(BR)+A+(IX)

10.堆栈寻址

操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。可以设置一组专门的寄存器,每个寄存器存放一个堆栈元素。也可在主存中划出一片区域作为堆栈。

(1)寄存器存放堆栈/硬堆栈
弹栈和压栈都不需要进行访存,成本高,速度快
在这里插入图片描述
设栈顶地址最小
将两个栈顶元素依次弹出进行运算在压回栈顶。每弹出一个元素后SP+1;在压回栈时,SP先-1再压回栈顶。

若M表示栈顶单元,寄存器Y用来存放运算结果
出栈:(M)→ACC,(SP)+1→SP
入栈:(SP)-1→SP,(Y)→(M)

(2)在主存中划分区域作为堆栈/软堆栈
弹栈和压栈都需要进行访存,成本低,速度慢。堆栈可用于函数调用时保存当前函数的相关信息
在这里插入图片描述

总结
在这里插入图片描述

  • 什么叫寻址方式?为什么要学习寻址方式?
    解:寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,它与硬件结构紧密相关,而且直接影响指令格式和指令功能。寻址方式分为指令寻址和数据寻址。寻找下一条将要执行的指令地址称为指令寻址,寻找操作数的地址称为数据寻址。
  • 试比较间接寻址和寄存器间接寻址
    间接寻址是相对于直接寻址而言的,指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址。可以是一次间接寻址,也可以是多次间接寻址。而寄存器间接寻址是指在寄存器中给出的不是一个操作数,而是操作数所在主存单元的地址。寄存器间接寻址将有效地址放在存放在寄存器中,比间接寻址少了一次访存。
  • 试比较基址寻址和变址寻址
    基址寻址是将CPU中基址寄存器BR的内容加上指令格式中的形式地址A而形成操作数的有效地址。变址寻址是指有效地址等于指令字中的形式地址A与变址寄存器IX的内容之和。①它们都可以有效地扩大指令寻址范围;②基址寄存器内容通常由系统程序设定,变址寄存器内容通常由用户设定;③基址寻址适用于程序的动态重定位,有利于多道程序设计;变址寻址适用于数组或字符串以及循环程序的处理;④基址寻址时,基准地址由基址寄存器给出,地址的改变反映在位移量形式地址A的取值上;变址寻址时,基准地址由A给出,地址的改变反映在变址值的自动修改上,变址值由变址寄存器IX给出。
  • 常见的寻址方式有哪几种?
    ①指令寻址用于寻找下一条将要执行的指令地址,分为顺序寻址方式和跳跃寻址方式
    ②数据寻址方式用于寻找操作数的地址,分为隐含寻址、立即(数)寻址、直接寻址、间接寻址、寄存器寻址、寄存器间接寻址、相对寻址、基址寻址、变址寻址、堆栈寻址

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

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

相关文章

移动web字体图标

字体图标下载字体图标使用字体图标使用类名引入字体图标使用unicode编码(了解)在线字体图标使用伪元素字体图标小结下载字体图标 具体的步骤&#xff1a; 使用字体图标 引入相关文件 复制相关的文件&#xff0c;到 fonts文件夹里面。 引入 css <link rel"styleshe…

回溯法复习(总结篇)

根据课本上的学习要点梳理&#xff0c;“通用解题法”&#xff0c;可以系统的搜索一个问题的所有解、任一解&#xff0c;他是一个既带有系统性&#xff08;暴力遍历&#xff09;又带有跳跃性&#xff08;剪枝&#xff09;的搜索算法。 理解回溯法和深度优先搜索策略 回溯的本质…

Kafka入门与核心概念

前言在我们开发过程中&#xff0c;有一些业务功能比较耗时&#xff0c;但是又不是很重要的核心功能&#xff0c;最典型的场景就是注册用户以后发送激活邮件分为两步1&#xff1a;向数据库插入一条数据2&#xff1a;向注册用户发送邮件第2步其实并不是核心功能&#xff0c;但是发…

SpringMVC-拦截器

1&#xff0c;pringMVC-拦截器 对于拦截器这节的知识&#xff0c;我们需要学习如下内容: 拦截器概念入门案例拦截器参数拦截器工作流程分析 1.1 拦截器概念 讲解拦截器的概念之前&#xff0c;我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务…

字节青训前端笔记 | 响应式系统与 React

本节课为前端框架 React 的基础课程讲解 React的设计思路 UI编程的特点 状态更新的时候&#xff0c;UI不会自动更新&#xff0c;需要手动调用DOM接口进行更新欠缺基本的代码层面的封装和隔离&#xff0c;代码层面没有组件化UI之间的数据依赖关系&#xff0c;需要手动维护&am…

【程序人生 | 价值扳机】你的寒假自律第一步(建议收藏)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计专业大二本科在读&#xff0c;阿里云社区专家博主&#xff0c;华为云社区云享专家&#xff0c;CSDN SAP应用技术领域新兴创作者。   在学习工…

小技巧:Excel顽固的名称、引用冲突的解决

共享编辑、跨文档引用的不便 Excel 的共享文档多人编辑、跨文档引用等功能似乎很美好&#xff0c;实际用下来很成问题。 首先共享文档虽然用约定按标注责任人的方式由不同的人编辑不同的行避免的多人同时编辑一行的冲突&#xff0c;但是这通常是个大文件&#xff0c;经常(大概…

函数 C语言】

函数的声明和定义 函数间调用关系是&#xff0c;由于函数调用其他函数&#xff0c;替他函数也可以互相调用&#xff0c;同一个函数可以被一个或多个函数调用任意次。 先声明&#xff0c;后调用。 #include <stdio.h> //去标准库下找文件 #include "stdio.h"…

分件操作和IO

1.文件的路径如图:当我们打开此电脑后(windows系统),上面会显示我们当前的位置&#xff0c;点击之后会出现如图片中的一段字符&#xff0c;这段字符代表着当前你所处位置的路径。最开头的D&#xff1a;/d&#xff1a;是盘符&#xff0c;后面会用斜杠‘/’或者反斜杠‘\’分开,该…

MFC的使用

1.初使用的简单代码该程序包含两个代码 头文件mfc.h和mfc.cpp文件头文件mfc.h#pragma once #include<afxwin.h>class MyApp:public CWinApp//CWinApp应用程序类 { public://程序入口virtual BOOL InitInstance(); }; class MyFrame : public CFrameWnd//继承窗口框架类a …

Java_Git:2. 使用git管理文件版本

目录 1 创建版本库 1.1 使用GitBash 1.2 使用TortoiseGit 2 添加文件 2.1 添加文件过程 2.2 工作区和暂存区 3 修改文件 3.1 提交修改 3.2 查看修改历史 3.3 差异比较 3.4 还原修改 4 删除文件 5 案例&#xff1a;将java工程提交到版本库 5.1 复制文件到工作目录 …

论文阅读:Boosting 3D Object Detection by Simulating Multimodality on Point Clouds

Boosting 3D Object Detection by Simulating Multimodality on Point CloudsResponse DistillationSparse-Voxel DistillationVoxel-to-Point DistillationInstance DistillationlossExperiments稠密&#xff08;多模态、多帧&#xff09;信息->稀疏&#xff08;单模态点云…

【华为上机真题 2023】数组去重和排序 (华为机考真题)

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

2023/1/20 ES6基本语法学习

1 let 命令的解读 1 let 声明变量&#xff0c;没有变量提升 <script>// 不存在变量提升console.log(variable)let variable zhaoshuai-lc </script>2 作用域 全局作用域函数作用域&#xff1a;function() {}块级作用域&#xff1a;{} let 是一个块作用域 <…

Spring中涉及的设计模式总结

Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实例化阶段主要是通过反射或者CGLIB对bean进行实例化&#xff0c;在这个阶段Spring又给我们暴露了很多的扩展点&#xff1a; 实现方式&#xff1a;BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现…

【设计模式】结构型模式·装饰者模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一.概述 在不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增…

2022年房地产投资退出方法和工具研究报告

第一章 房地产投资概况 房地产商品既是人们日常“衣食住行”中的一种必需品&#xff0c;又因保值增值的功能而具有很好的投资品属性。房地产投资是以房地产为对象&#xff0c;为获得预期效益而对土地和房地产开发、房地产经营&#xff0c;以及购置房地产等进行的投资。 房地产…

深度学习 GNN图神经网络(二)PyTorch Geometric(PyG)安装

一、前言 我们使用torch_geometric库来实现图神经网络的编码&#xff0c;因为它与PyTroch天然集成。本文介绍了PyTorch Geometric&#xff08;PyG&#xff09;的安装与测试。 二、安装 首先打开官方的安装说明文档&#xff1a;https://pytorch-geometric.readthedocs.io/en/…

蓝桥杯 stm32 LCD显示及 数据格式化

文章代码使用 HAL 库。 文章目录前言一、LCD 原理图&#xff1a;二、LCD 基本函数&#xff1a;1.LCD 清屏函数&#xff1a;LCD_Clear ( u16 Color )&#xff1b;2. 显示一行字符串&#xff1a;LCD_DisplayStringLine(u8 Line, u8 *ptr)&#xff1b;3.设置字符背景色&#xff1a…

switch自制软件开发环境搭建

参考: https://switch.homebrew.guide/ https://switchbrew.org/wiki/Main_Page https://www.bilibili.com/video/BV133411Q77X/?spm_id_from333.788&vd_sourcec5c272e9490d8bf475c8204462fc26e7 1.开发环境 开发机 -> 虚拟机 ubuntu22.04 设备 -> 破解switch 大…