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关键点检测等等,基本上涵盖了图像领域大部分场景了。 …...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...