计算机组成原理的学习笔记(8)-- 指令系统·其一 指令的组成以及数据寻址方式

学习笔记

前言


本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。

1. 指令

1.1 组成
  • 操作码(Opcode):指指令中执行特定操作的部分。
  • 地址码:指令中用于指定操作数位置的部分。
1.2 扩展操作码
  • 变化长度操作码:采用哈夫曼编码等技术确保操作码不重复。
  • 实现步骤:需求分析、设计、硬件实现、软件支持、验证测试和文档发布。

2. 常见的数据寻址方式

2.1 立即寻址
  • 定义:操作数直接写在指令中,不需要访问内存。
  • 实现:指令的操作数就是数据。
  • 应用场景:常用于赋值操作,例如 MOV AX, 5,将数值 5 加载到寄存器 AX
  • 优点:简单,速度最快。
  • 缺点:数据范围小。

2.2 直接寻址
  • 定义:指令中给出的是一个内存地址,CPU 直接访问该地址的内容。
  • 实现:从内存中直接读取数据。
  • 应用场景:简单的内存访问。
  • 优点:简洁
  • 缺点:不灵活,无法动态计算地址。

2.3 间接寻址
  • 定义:指令中给出的地址是一个指针,指向另一个内存地址,CPU 需要先从该指针中获取目标地址,再访问数据。
  • 实现:首先从给定的地址获取一个指向数据的地址,然后再访问数据。
  • 应用场景:动态数据访问,指针操作等。
  • 优点:灵活,可以访问不同的内存位置,尤其适用于复杂数据结构。
  • 缺点:需要两次内存访问,速度较慢。

2.4 隐含寻址
  • 定义:指令的操作数由指令本身隐含或自动确定,操作数的位置不需要显式提供。CPU 在执行指令时自动操作特定的寄存器或内存位置。

    实现:操作码本身决定了操作数的位置,通常固定与某些寄存器或硬件资源关联。

    应用场景:适用于寄存器操作、堆栈操作、状态寄存器操作等简单且快速的操作。

    优点

    • 无需显式地址,指令格式简洁。
    • 操作快速,无需地址计算或内存访问。

    缺点

    • 灵活性较差,操作数位置固定,无法动态指定或变更。

2.5 寄存器寻址
  • 定义:操作数直接存储在寄存器中,指令通过指定寄存器来访问数据。
  • 实现:指令操作数本身是寄存器的值,无需访问内存。
  • 应用场景:寄存器之间的操作,如 MOV AX, BX,将寄存器 BX 的值复制到 AX
  • 优点:访问速度非常快,因为寄存器访问是最快的。
  • 缺点:数量有限,无法存储大量数据。

2.6 寄存器间接寻址
  • 定义:使用寄存器存储数据的地址,寄存器中存储的是指向数据的内存地址,CPU 通过寄存器访问内存。
  • 实现:寄存器中的值指向目标数据的内存地址,CPU 通过该寄存器来间接访问数据。
  • 应用场景:通过寄存器指向内存地址的操作,如 MOV AX, [BX],将 BX 指向的内存地址中的值加载到 AX 寄存器中。
  • 优点:灵活,寄存器间接寻址支持动态访问内存。
  • 缺点:需要管理寄存器中的地址,速度较直接寻址慢。

2.7 基址寻址
  • 定义:通过基地址寄存器和偏移量计算最终地址。
  • 实现:将基址寄存器和偏移量相加,得到内存地址。
  • 应用场景:数组或结构体的访问。
  • 优点:适合访问连续的数据块,灵活,常用于数组和结构体。
  • 缺点:需要管理基址寄存器和偏移量。

2.8 变址寻址
  • 定义:基址寻址的一种扩展,使用基址寄存器和索引寄存器的组合来计算地址。
  • 实现:基址寄存器 + (索引寄存器 × 步长) + 偏移量。
  • 应用场景:访问数组元素。
  • 优点:支持灵活的内存访问,尤其适用于数组访问。
  • 缺点:需要使用多个寄存器,增加了计算复杂度。

2.9 相对寻址
  • 定义:相对地址是指相对于当前指令的地址(或程序计数器 PC)的偏移量。
  • 实现:通过当前地址(PC)加上偏移量计算最终地址,常用于跳转或分支指令。
  • 应用场景:程序跳转、分支语句、函数调用等。
  • 优点:常用于控制流操作,支持代码独立性和程序重定位。
  • 缺点:只能用于跳转和分支指令,通常不适用于数据访问。

2.10 堆栈寻址
  • 定义:通过栈顶指针(SP)来访问数据。
  • 实现:栈顶元素的地址由栈指针寄存器(SP)决定。
  • 应用场景:函数调用、局部变量管理、返回地址管理等。
  • 优点:支持动态的函数调用和局部数据存取,常用于递归和函数栈。
  • 缺点:操作栈需要使用专门的寄存器和管理机制。

结语

好累,好多没看懂的都得问问AI,寻址什么的…好麻烦。请添加图片描述

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

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

相关文章

JavaScript 标准内置对象——Array

1、构造函数 2、静态方法 // 从可迭代或类数组对象创建一个新的浅拷贝的数组实例 // arrayLike 想要转换成数组的类数组或可迭代对象 Array.from(arrayLike, mapFn, thisArg) Array.fromAsync(arrayLike, mapFn, thisArg) // 异步Array.isArray(value) // 判断传递的值是否是一…

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…

【PSINS】EKF、UKF、CKF三个滤波下的组合导航(松组合)对比

该 MATLAB 代码实现了扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)和无迹卡尔曼滤波的变体(CKF)的对比,主要用于导航与定位领域,通过处理惯性测量单元(IMU)和GP…

PPT画图——如何设置导致图片为600dpi

winr,输入regedit打开注册表 按路径找,HKEY_CURRENT_USER\Software\Microsoft\Office\XX.0\PowerPoint\Options(xx为版本号,16.0 or 15.0或则其他)。名称命名:ExportBitmapResolution 保存即可,…

Linux复习4——shell与文本处理

认识vim编辑器 #基本语法格式: vim 文件名 •如果文件存在,进入编辑状态对其进行编辑 •如果文件不存在,创建文件并进入编辑状态 例: [rootlocalhosttest]# vim practice.txt #Vim 编辑器三种模式: 命令模式&a…

Gmsh有限元网格剖分(Python)---点、直线、平面的移动

Gmsh有限元网格剖分(Python)—点、直线、平面的移动和旋转 最近在学习有限元的网格剖分算法,主要还是要参考老外的开源Gmsh库进行,写一些博客记录下学习过程,方便以后回忆嘞。 Gmsh的官方英文文档可以参考:gmsh.pdf 但咋就说&a…

【Linux】基础I/O -> 如何谈文件与文件系统?

文件的基础理解 空文件也要在磁盘上占据空间。文件 文件内容文件属性。文件操作 对内容的操作 对属性的操作或者是对内容和属性的操作。标定一个文件,必须使用:文件路径 文件名(具有唯一性)。如果没有指明对应的文件路径&…

python+reportlab创建PDF文件

目录 字体导入 画布写入 创建画布对象 写入文本内容 写入图片内容 新增页 画线 表格 保存 模板写入 创建模板对象 段落及样式 表格及样式 画框 图片 页眉页脚 添加图形 构建pdf文件 reportlab库支持创建包含文本、图像、图形和表格的复杂PDF文档。 安装&…

软件项目需求分析的实践探索(1)

一、项目启动与规划 组建团队 包括项目经理、系统分析师、业务分析师以及可能涉及的最终用户代表和领域专家等。例如,开发一个医疗管理软件,就需要有医疗行业的专家参与,确保对医疗业务流程有深入理解。明确各成员的职责,如系统分…

Windows下ESP32-IDF开发环境搭建

Windows下ESP32-IDF开发环境搭建 文章目录 Windows下ESP32-IDF开发环境搭建一、软件安装二、搭建IDF开发环境2.1 安装VS Code插件:2.2 配置ESP-IDF插件:2.3 下载例程源码: 三、编译和烧录代码四、Windows下使用命令行编译和烧录程序4.1 配置环…

从 GitLab.com 到 JihuLab.com 的迁移指南

本文分享从 GitLab.com 到 JihuLab.com 的迁移指南。 近期,GitLab Inc. 针对其 SaaS 产品做了限制,如果被判定为国内用户,则会建议使用其在国内的发布版本极狐GitLab。从 GitLab SaaS 产品(GitLab.com)迁移到极狐GitL…

Mysql-索引的数据结构

为什么要使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查看查询条件…

ReactPress 1.6.0:重塑博客体验,引领内容创新

ReactPress 是一个基于Next.js的博客&CMS系统, Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 体验地址:http://blog.gaoredu.com/ 今天,我们自豪地宣布ReactPress 1.6.0版本的正式发布,…

秒鲨后端之MyBatis【1】环境的搭建和核心配置文件详解

​ 别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! Mybatis简介 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff…

【Go】Go数据类型详解—map

1. 前言 本篇博客将会介绍Go语言当中的另一大核心数据类型——map(映射),当然在介绍这个数据类型之前我们还是要思考引入这个数据类型的原因: ❓ 需求:要求完成对一个班级所有同学的信息管理(包括但不限于…

Agent 案例分析:金融场景中的智能体-蚂蚁金服案例(10/30)

Agent 案例分析:金融场景中的智能体 —蚂蚁金服案例 一、引言 在当今数字化时代,金融行业正经历着深刻的变革。随着人工智能技术的飞速发展,智能体(Agent)在金融场景中的应用越来越广泛。蚂蚁金服作为金融科技领域的…

十五、新一代大模型推理架构Mamba

Mamba架构:下一代大模型架构的可能性? 随着深度学习的快速发展,Transformer 架构在过去几年中成为了自然语言处理(NLP)和生成式AI模型的主流架构。然而,Transformer并非完美,其计算效率、长序列建模能力等方面依然存在瓶颈。近期出现的Mamba架构被认为是对这些问题的潜…

LabVIEW中什么和C 语言指针类似?

在LabVIEW中,与C语言指针类似的概念是 引用 (Reference)。 引用在LabVIEW中主要用于以下几个方面: 数据引用:LabVIEW通过引用传递数据,而不是复制数据。通过引用,多个VIs可以共享数据而不需要复制整个数据结构&#xf…

前端编程图表化助手!Echarts入门

Echarts-一个基于javaScript的开源可视化图表库 在日常编程中,我们经常会用到类似饼图、柱状图等,而在网页中使用原生html和css很难做到类似效果。那么作为前端工程师,我们如何做出来一份好看而且实用的图标呢? 那么接下来&…

企业AI助理背后的技术架构:从数据到智能决策

在当今数字化时代,企业AI助理已经成为推动企业数字化转型和智能化升级的重要工具。它们通过整合企业内外部数据资源,运用先进的算法和模型,为企业提供高效、精准的智能决策支持。本文将深入探讨企业AI助理背后的技术架构,从数据收…