4。计算机组成原理(3)指令系统
嵌入式软件开发,非科班专业必须掌握的基本计算机知识
核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统
指令系统(Instruction Set)是计算机体系结构的关键组成部分之一,它定义了处理器支持的操作指令集合及其执行方式。指令系统决定了计算机能够执行的任务类型和处理速度,并且影响着软件的编程难度和运行效率。
指令系统通常包括以下几个方面:
-
操作类型:指令可以实现的操作类型,如算术运算、逻辑运算、位移运算、分支跳转、数据传输等。
-
操作数类型:指令操作数的类型,如整数、浮点数、指针、字符串等。
-
寻址方式:指令如何寻址操作数的方式,如立即数寻址、直接寻址、间接寻址、基址寻址、变址寻址等。
-
数据长度:指令操作数的长度,如8位、16位、32位、64位等。
-
流水线:指令执行时是否使用流水线加速技术,以提高指令执行效率。
-
中断异常:指令系统支持的中断、异常、陷阱类型和处理方式。
-
特殊功能:指令系统还可能提供一些特殊功能,如乘法运算、除法运算、卡车向量乘积等。
不同的指令系统有不同的设计目标和特点。一些指令系统更加注重处理速度,一些则注重可编程性和通用性。例如,x86指令系统具有广泛的应用,并有着复杂的指令集和灵活的寻址方式,但不利于代码优化;而ARM指令系统则侧重于低功耗和高效能,以及支持多种操作数类型和寻址方式。
开发者需要仔细研究目标处理器的指令集,了解其设计目标、特点、限制和优化方法,以便能够有效地编写高效、稳定的程序。
一 指令格式
第一部分:操作码字段(OP),第二部分:地址码字段 (A)
首先,地址码字段类型
四地址指令
三地址指令
二地址指令
一地址指令
零地址指令
优缺点
其次,操作码字段类型
定长编码
变长编码
扩展操作码编码 (重要)
此时二地址容易被误判成三地址
注意:操作码编码的时候,短码不能是长码的前缀;扩展窗口可以留多个
二 指令寻址方式
1)指令寻址
指令寻址有顺序寻址和跳跃寻址两种方式
2)数据寻址——加入寻址特征
立即寻址
直接寻址
隐含寻址
间接寻址
寄存器寻址
寄存器间接寻址
基址寻址:Ri保存了基址寄存器的编号
基址寻址是一种常见的寻址方式,它把某个地址作为基地址(也称为基准地址或者基地址寄存器)来执行寻址操作。在指令中使用基址加上偏移量来计算最终访问的内存地址,这样可以相对于基地址来实现寻址,从而避免了直接对内存地址进行访问。基址寻址的优点主要体现在以下几个方面:
灵活性:基址寻址可以将一个地址当作基准来执行寻址操作,而不是使用固定的、硬编码的地址,可以使得程序设计更加灵活。
安全性:基址寻址可以避免直接访问内存地址,使得代码更加安全。因为如果程序直接访问内存地址,那么内存地址很容易被黑客利用,造成系统漏洞。
便捷性:通过基址寻址,可以实现数组、矩阵等复杂数据结构的处理,简化程序设计,并且在处理多维数组、结构体等数据类型时,不需要频繁的手动计算偏移量。
维护性:基址寻址使代码可读性更高,代码具有自解释性,提高了代码的可维护性。因为通过基址寻址,直接可以理解程序员所写的指令是干什么的。
总的来说,基址寻址是一种灵活、安全、便捷、易维护的寻址方式,尤其适合用于处理复杂数据结构和多维数组等情况。
变址寻址
变址寻址也是一种常见的寻址方式,它将一个基地址与一个偏移量相加,来计算最终访问的内存地址。变址寻址主要适用于对数组进行访问、循环结构等情况,其优点主要体现在以下几个方面:
灵活性:变址寻址可以根据程序需要,动态地计算基地址和偏移量,使得程序设计更加灵活。
维护性:变址寻址可以减少代码重复,简化程序设计,提高代码的可读性和可维护性。通过使用循环结构和数组,可以用较少的代码实现复杂的操作。
效率高:变址寻址采用了指针或者数组方式,节约了CPU运算时间和内存空间,并且可以直接访问数据,速度较快。
便捷性:变址寻址可以方便地处理多维数组,可以使用一个算式表示多维数组中的元素地址,避免了繁琐的手动计算。
总的来说,变址寻址是一种灵活、高效、便捷、易维护的寻址方式,特别适合用于对数组进行访问和循环结构等场景下的操作。
相对寻址(变成可以浮动的程序)
相对寻址是一种相对于当前指令地址计算的寻址方式,通过在指令中使用一个偏移量来计算最终访问的内存地址。相对寻址的优点主要体现在以下几个方面:
灵活性:相对寻址可以根据需要动态地计算地址,不依赖于固定位置或基址。这样可以实现更灵活的程序设计,提高代码的可读性和可维护性。
相对安全:相对寻址避免了直接访问内存地址,相对安全,可以提高代码的安全性。因为如果程序直接访问内存地址,那么内存地址很容易被黑客利用,造成系统漏洞。
效率高:由于相对寻址是相对于当前指令地址计算的,所以它不需要额外的寄存器或内存,可以节省一定的时间和空间。
程序设计简单:相对寻址可以使得程序设计更加简单。特别是在处理分支跳转时,相对寻址可以用较少的指令实现复杂的控制流程,从而简化程序设计。
总的来说,相对寻址是一种灵活、安全、高效、简单的寻址方式,特别适合用于分支跳转和条件控制等操作。
堆栈寻址
三 CISC(复杂指令集)&RISC(精简指令集)
CISC(复杂指令集计算机)和RISC(精简指令集计算机)是两种计算机指令集的不同类型(两种指令设计方式)。它们有以下几个区别:
-
指令集数量:CISC的指令集比较大,其中包括很多功能强大但是比较复杂的指令;而RISC的指令集数量较少,每个指令都比较简单。
-
存储器访问:CISC采用了一些复杂指令,可以直接访问内存中的数据,尤其适合处理复杂的数据结构,但是需要大量的存储器空间;而RISC采用了载入-存储结构,只能对寄存器进行操作,对内存的访问操作都必须通过load和store等指令进行。
-
指令执行时间:CISC的每条指令需要较长的时间执行,但是可以一次完成多个操作;而RISC每条指令执行时间较短,但是每条指令只能执行一种操作。
-
编译器:由于CISC的指令集较为复杂,编译器需要更强的优化能力来生成高效的汇编代码;而RISC的指令集比较简单,编译器相对容易实现。
总的来说,CISC的优点是指令集功能强大,可以完成更复杂的操作;而RISC的优点则是指令执行速度快、编写编译器相对容易、节省存储空间等。在实际应用中,CISC和RISC都有自己的领域和优缺点,需要根据不同的需求进行选择。
时钟周期:
一个时钟脉冲所需要的时间。在计算机组成原理中又叫T周期或节拍脉冲。是CPU和其他单片机的基本时间单位。
机器周期:
通常用从内存中读取一个指令字的最短时间来规定CPU周期(机器周期),也即CPU完成一个基本操作所需的时间。
一条指令的执行
四条指令全部进入流水线的状态(译码的同时,进行取指令操作),精简指令系统更适用于流水线操作
相关文章:

4。计算机组成原理(3)指令系统
嵌入式软件开发,非科班专业必须掌握的基本计算机知识 核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统 指令系统(Instruction Set)是计算机体系结构的关键组成部分之一,它定义了处…...

【Elasticsearch】NLP简单应用
文章目录 NLP简介ES中的自然语言处理(NLP)NLP演示将opennlp插件放在ESplugins路径中下载NER模型配置opennlp重启ES、验证 NLP简介 NLP代表自然语言处理,是计算机科学和人工智能领域的一个分支。它涉及使用计算机来处理、分析和生成自然语言,例如英语、中…...
3. 云计算的落地实践(下)
本章讲解知识点 云计算如何落地实践ISO镜像文件创建虚拟机入门创建数据节点配置VMWare创建虚拟机三种网络模式1. 云计算的落地实践 上一章我们讲了云计算的业界实践,即:搭建IaaS后,用于创建虚拟机,在虚拟机上部署PaaS,用于管理同时部署在虚拟机上的容器,这就是业界普遍的…...

javaEE+mysql学生竞赛管理系统
本系统是基于JAVA平台开发的一套学生竞赛信息管理的系统。系统采用JSP为编程语言。数据库采用Mysql建立数据之间的转换。论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。 本课题的目的是使…...
车辆出险记录查询API接口
车辆出险记录接口可以帮助车主、保险公司、交通管理部门等各方快速查询车辆的出险记录,了解车辆风险情况、核算保险费用等。这篇文章将探讨车辆出险记录接口的作用、应用场景、使用方式以及一些注意事项。 作用: 车辆出险记录接口主要解决了快速获取车…...

MySQL的概念,编译及安装
一.数据库的基本概念 1、数据(Data) • 描述事物的符号记录 • 包括数字,文字,图形,图像,声音,档案记录等 • 以“记录”形式按统一的格式进行存储 2、表 • 将不同的记录组织在一起 • …...

系统性能压力测试
系统性能压力测试 一、压力测试 压力测试是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内&…...

从零开始学习Linux运维,成为IT领域翘楚(三)
文章目录 🔥Linux超级用户与伪用户🔥Linux文件基本属性🔥Linux权限字与权限操作 🔥Linux超级用户与伪用户 Linux下用户分为三类:超级用户、普通用户、伪用户 ⭐ 超级用户:用户名为root,具有一切…...
轻松搭建自己的ChatGPT聊天机器人,让AI陪你聊天!
随着人工智能技术的发展,聊天机器人已经成为了我们生活中的一部分。无论是在客服机器人上还是智能助手上,聊天机器人都能够给我们带来真正的便利和快乐。现在,你也可以轻松搭建自己的ChatGPT聊天机器人,和它天马行空地聊天&#x…...

CompletableFutrue异步处理
异步处理 一、线程的实现方式 1. 线程的实现方式 1.1 继承Thread class ThreadDemo01 extends Thread{Overridepublic void run() {System.out.println("当前线程:" Thread.currentThread().getName());} }1.2 实现Runnable接口 class ThreadDemo02 implements …...
【前端面经】JS-对象的可枚举性
JavaScript中的对象是非常重要的数据类型,它们作为编程中的基础构建块,可以被用来表示各种数据结构。对象是由属性构成的,每个属性都包含一个名字和一个值。属性值可以是基本类型或其他对象。在JavaScript中,对象属性有许多特性&a…...

沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置
目录 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置 硬件部分 CH32V208WBU6 评估板WCH-LinkE 或 WCH-Link 硬件环境与Windows下…...

日撸 Java 三百行day38
文章目录 说明day381.Dijkstra 算法思路分析2.Prim 算法思路分析3.对比4.代码 说明 闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护:https://github.com/fulisha-ok/…...

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——④转换成PASCAL VOC格式数据集
文章目录 关于PASCAL VOC数据集目录结构 ①创建VOC数据集的几个相关目录XML文件的形式 ②读取dcm文件与xml文件的配对关系③创建VOC格式数据集④创建训练、验证集 本文所用代码见文末Github链接。 关于PASCAL VOC数据集 pascal voc数据集是关于计算机视觉,业内广泛…...
两种使用 JavaScript 实现网页高亮关键字的方法
随着各种类型的信息源变得越来越多,我们常常需要通过搜索引擎来找到自己需要的信息。在搜索结果中,通常会高亮显示与我们搜索的关键词相关的内容,这样我们就能更快地找到自己需要的信息。 在本文中,我们将探讨如何使用 JavaScrip…...

【SpringBoot】SpringBoot集成ElasticSearch
文章目录 第一步,导入jar包,注意这里的jar包版本可能和你导入的不一致,所以需要修改第二步,编写配置类第三步,填写yml第四步,编写util类第五步,编写controller类第六步,测试即可 第一…...

从 Elasticsearch 到 Apache Doris,10 倍性价比的新一代日志存储分析平台
作者介绍:肖康,SelectDB 技术副总裁 导语 日志数据的处理与分析是最典型的大数据分析场景之一,过去业内以 Elasticsearch 和 Grafana Loki 为代表的两类架构难以同时兼顾高吞吐实时写入、低成本海量存储、实时文本检索的需求。Apache Doris…...

探讨Redis缓存问题及解决方案:缓存穿透、缓存击穿、缓存雪崩与缓存预热(如何解决Redis缓存中的常见问题并提高应用性能)
Redis是一种非常流行的开源缓存系统,用于缓存数据以提高应用程序性能。但是,如果我们不注意一些缓存问题,Redis也可能会导致一些性能问题。在本文中,我们将探讨Redis中的一些常见缓存问题,并提供解决方案。 一、缓存穿…...
【Python】怎么在pip下载的时候设置镜像?(常见的清华镜像、阿里云镜像以及中科大镜像)
一、清华镜像 在使用 pip 命令下载 Python 包时,可以通过设置 pip 的镜像源为清华镜像来加快下载速度。 以下是如何设置清华镜像源的步骤: 打开终端或命令行窗口执行以下命令添加清华镜像源: pip config set global.index-url https://py…...

【AI面试】目标检测中one-stage、two-stage算法的内容和优缺点对比汇总
在深度学习领域中,图像分类,目标检测和目标分割是三个相对来说较为基础的任务了。再加上图像生成(GAN,VAE,扩散模型),keypoints关键点检测等等,基本上涵盖了图像领域大部分场景了。 …...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...