当前位置: 首页 > news >正文

网络工程师 (3)指令系统基础

一、寻址方式

(一)指令寻址

顺序寻址:通过程序计数器(PC)加1,自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。

跳跃寻址:通过转移类指令直接或间接给出下一条指令的地址。跳跃寻址的转移地址形成方式有直接(绝对)、相对和间接寻址三种,用于实现程序的分支和循环。

(二)数据寻址

隐含寻址:操作数地址不明显的给出,隐藏在指令中。这种寻址方式简化了指令的格式,但降低了指令的灵活性。

立即寻址:指令中直接给出操作数的值,而不是操作数的地址。这种寻址方式获取操作数最快,因为不需要访问内存。例如,MOV AX,#40H,这条指令将立即数40H传送给通用寄存器AX。

直接寻址:指令中直接给出操作数的地址。例如,MOV A,40H,这条指令将内部RAM中40H地址的内容传送给累加器A。直接寻址方式简单明了,但寻址范围受限。

间接寻址:指令中给出的地址不是操作数的地址,而是存放操作数地址的内存单元的地址。间接寻址方式可以扩大寻址范围,但增加了访问内存的次数,降低了指令的执行速度。间接寻址有一级寻址和多级间接寻址之分,多级间接寻址需要多次访问内存才能得到操作数。

寄存器寻址:指令中直接给出操作数所在的寄存器的编号。寄存器寻址方式访问速度快,因为寄存器通常位于CPU内部,但寄存器数量有限,寻址范围受限。

寄存器间接寻址:指令中的地址码给出某一通用寄存器的编号,该寄存器中存放的是操作数的有效地址。例如,MOV A,@Ri(i=0或1),这条指令先寻址Ri寄存器,得到其中内容为操作数的地址,再访问该地址得到操作数。寄存器间接寻址方式结合了寄存器寻址和间接寻址的优点,既提高了访问速度,又扩大了寻址范围。

相对寻址:将程序计数器(PC)的内容加上指令格式中的形式地址,形成操作数的有效地址。相对寻址方式使得操作数的地址随着指令地址的变化而变化,但两者之间总是相差一个固定值,这对于实现程序的分支和循环非常有用。

基址寻址:将基址寄存器的内容加上指令格式中的位移量,形成操作数的有效地址。基址寻址方式通常用于将用户的逻辑地址转换为主存的物理地址,解决程序在主存中的定位问题。

变址寻址:将变址寄存器的内容与指令中给出的形式地址相加,形成操作数的有效地址。变址寻址方式最典型的用法是将指令中的形式地址作为基准地址,而变址寄存器的内容作为修改量,用于访问字符串、向量和数组等成批数据。

堆栈寻址:从规定的堆栈中取出操作数。堆栈是一种特殊的数据结构,遵循后进先出的原则,堆栈寻址方式通常用于实现子程序的调用和返回。

二、指令系统类型 

(一)按指令集长度分类

  1. 复杂指令系统(CISC)

    • 特点:指令长度可变,包含大量复杂的指令,指令格式和寻址方式多样化。
    • 优点:功能丰富,能够直接执行高级语言的某些操作,减少编译器的复杂性。
    • 缺点:指令复杂度高,执行时间长,功耗大,且大量复杂指令在实际中很少被使用,造成硬件资源的浪费。
    • 代表:x86指令集。
  2. 精简指令系统(RISC)

    • 特点:指令长度固定,指令格式简单,采用流水线技术,指令数量较少但每条指令的功能相对简单。
    • 优点:指令执行速度快,功耗低,易于实现高速缓存和流水线技术,适合用于高性能计算机和嵌入式系统。
    • 缺点:需要更多的指令来完成相同的任务,编译器和汇编语言的设计相对复杂。
    • 代表:MIPS、ARM、LoongArch等。
  3. 超长指令系统(VLIW)

    • 特点:本质是多条同时执行指令的组合,每条指令可以包含多个操作,指令长度非常长。
    • 优点:能够充分利用处理器的并行处理能力,提高指令的执行效率。
    • 缺点:编译器的设计非常复杂,需要精确地预测哪些指令可以并行执行,且对处理器的硬件设计有较高要求。
    • 应用:主要在一些高性能计算领域和特定应用中使用。

(二)按指令操作的数据类型分类

  1. 堆栈型指令

    • 特点:操作数都在栈顶,通过压栈和出栈操作进行数据的存取和运算。
    • 优点:指令格式简单,易于实现,适合用于解释性语言和某些嵌入式系统。
    • 缺点:运算速度相对较慢,因为需要频繁地进行栈操作。
  2. 累加器型指令

    • 特点:一个隐含操作数是累加器,另一个操作数在指令中指定,结果写回到累加器中。
    • 优点:简化了指令格式,减少了内存访问次数。
    • 缺点:累加器的使用限制了指令的并行性,且不适用于所有类型的运算。
  3. 寄存器型指令

    • 特点:操作数都来自寄存器,结果也存于寄存器中。寄存器型指令包括寄存器-存储器型和寄存器-寄存器型两种。
    • 优点:访问速度快,因为寄存器通常位于CPU内部,且能够充分利用处理器的并行处理能力。
    • 缺点:寄存器数量有限,寻址范围受限,需要编译器进行复杂的寄存器分配和优化。

(三)按指令的功能分类

  1. 数据传送类指令

    功能:实现数据在不同存储单元之间的传送,包括主存单元之间、主存和寄存器之间、寄存器和寄存器之间的数据传送。
  2. 算术/逻辑运算类指令

    功能:完成定点/浮点数的四则运算、求补等运算,以及逻辑运算、移位操作等。
  3. 程序控制类指令

    功能:改变程序的执行顺序,包括条件转移、无条件转移、循环控制等。
  4. 输入输出类指令

    功能:实现外设和主机之间、外围设备之间的信息交换。
  5. 其他指令

    功能:包括字符串处理指令、特权指令、程序状态字寄存器置位复位指令、测试指令、暂停指令等。这些指令用于实现特定的功能或满足特定的需求。

三、Flynn分类

(一)基本概念

指令流:指计算机在执行程序时,指令序列的流动。

数据流:指计算机在执行指令时,所需数据的流动。

(二)四种基本架构类型

  1. 单指令流单数据流(SISD, Single Instruction Single Data Stream)

    • 特点:传统的顺序处理计算机,其指令部件一次仅对一条指令进行译码,并仅对一个操作部件分配数据。
    • 示例:早期的个人计算机,如386、486等,以及某些单片机系统。
    • 应用:适用于简单的顺序执行任务,如基本的算术和逻辑运算。
  2. 单指令流多数据流(SIMD, Single Instruction Multiple Data Stream)

    • 特点:包含多个重复的运算处理单元,但仅存在唯一的指令部件。指令部件从存储器中取出指令,译码后发往所有运算处理单元,各运算处理单元按照同一指令流的要求处理各自不同的数据。
    • 优点:能够高效处理大量相同类型的数据,实现空间上的并行性。
    • 示例:图形处理器(GPU)、Intel的MMX或SSE指令集、AMD的3D Now!指令集。
    • 应用:适用于多媒体处理、图像处理、科学计算等领域。
  3. 多指令流单数据流(MISD, Multiple Instruction Stream Single Data Stream)

    • 特点:多个指令流处理单个数据流。然而,这种架构在实际应用中很少见,因为它并不高效。理论上,每个指令流可能对数据流执行不同的操作,但在实践中,很难找到一个实际的应用场景,其中这种处理方式会比单指令流或多指令流多数据流更有优势。
    • 现状:主要作为理论模型存在,没有投入到实际应用之中。
  4. 多指令流多数据流(MIMD, Multiple Instruction Stream Multiple Data Stream)

    • 特点:实现作业、任务、指令、数据各个级别全面并行执行的计算机系统。拥有多个处理机,每个处理机具有独立的程序,每个程序为相应的处理器生成一个指令流,并处理各自不同的数据。
    • 优点:能够充分利用处理器的并行处理能力,提高系统的整体性能。
    • 示例:高性能服务器、超级计算机、分布式计算机系统。
    • 应用:适用于大规模数据处理、高性能计算、云计算等领域。

(三)意义与应用

       Flynn分类法不仅有助于理解不同计算机架构的并行性特点和处理方式,还为计算机系统的设计和优化提供了指导。例如,在开发高性能计算机或嵌入式系统时,可以根据具体的应用需求选择合适的架构类型。同时,Flynn分类法也为计算机体系结构的研究和发展提供了重要的理论基础。

四、流水线技术

(一)基本原理

       流水线技术的基本原理是将一个重复的过程分解为若干个子过程,这些子过程在时间上重叠进行,前一个子过程为下一个子过程创造执行条件。在计算机系统中,流水线技术被用来优化指令的执行过程,将一条复杂的指令分解为多个简单的子任务,并由不同的功能部件并行处理,从而提高整体执行效率。

(二)分类

  1. 按处理级别分类

    • 部件级流水线:在处理较为复杂的运算时采用。
    • 指令级流水线:将一条指令的执行过程分为多个阶段,如取指令、译码、执行、写回结果等。
    • 处理器间级流水线:每个处理器完成其专门的任务。
  2. 按功能分类

    • 单功能流水线:只完成一种功能,如乘法或浮点运算等,多用于数字信号处理器(DSP)。
    • 多功能流水线:在不同情况下可完成不同功能。
  3. 按连接方式分类

    • 静态流水线:同一时间内,多功能结构只能按一种功能的连接方式工作。
    • 动态流水线:同一时间内,可以有多种功能的连接方式同时工作。
  4. 按处理对象分类

    • 标量流水线:处理一般数据。
    • 向量流水线:处理矢量数据。
  5. 按流水线形状分类

    • 线性流水线:指各功能模块顺序串行连接,无反馈回路。
    • 非线性流水线:带有反馈回路的流水线。

(三)关键步骤与实现方式

       以经典的奔腾处理器为例,其整数流水线通常分为四级:指令预取、译码、执行和写回结果。每一级都对应一个专门的功能部件,负责完成相应的子任务。当第一条指令在执行某一阶段时,第二条指令可以同时进入流水线的下一个阶段,以此类推,实现了指令的并行处理。

       流水线技术主要通过硬件电路来实现。在CPU中,通过设计多个并行工作的功能部件和相应的控制逻辑,来支持指令的并行处理。此外,软件层面的优化也是实现流水线技术的重要手段。编译器可以通过重新组织代码、优化指令序列等方式,来减少指令间的依赖关系,提高流水线的效率。

(四)性能指标

  1. 吞吐率:指的是计算机中的流水线在特定的时间内可以处理的任务或输出数据的结果的数量。流水线的吞吐率可以进一步分为最大吞吐率和实际吞吐率,它们主要和流水段的处理时间、缓存寄存器的延迟时间有关。
  2. 效率:表示流水线的设备利用率。在时空图上,流水线的效率定义为有效时间与总时间之比。
  3. 加速比:用S表示,若一个任务在单功能部件上顺序执行需n个时间单位,在m段流水线上执行需(m+n-1)个时间单位,则流水线对该任务的加速比为S=n/(m+n-1)。

(五)优势与挑战

  1. 提高执行速度:通过并行处理多条指令的不同阶段,流水线技术显著提高了计算机的执行速度。
  2. 资源利用率高:各个功能部件在同一时间内可以处理不同的指令子任务,从而提高了硬件资源的利用率。
  3. 简化设计复杂度:将复杂的指令分解为简单的子任务,有助于简化计算机体系结构的设计和实现。

       然而,流水线技术也面临着一些挑战,如资源冲突、数据冒险等问题。为了解决这些问题,设计者们采取了多种措施,如增加缓存、优化指令调度等,以确保流水线的顺畅运行。

(六)应用与影响

       流水线技术在现代计算机系统中得到了广泛应用,从个人电脑到大型服务器,从嵌入式系统到云计算平台,都可以看到流水线技术的身影。它显著提高了CPU的运算速度,使得计算机能够更快地处理数据。此外,流水线技术还促进了计算机硬件和软件的发展,为计算机性能的不断提升提供了有力支持。

 结语  

人生路上步步未知

正是这些铸就精彩

!!!

相关文章:

网络工程师 (3)指令系统基础

一、寻址方式 (一)指令寻址 顺序寻址:通过程序计数器(PC)加1,自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址:通过转移类指令直接或间接给出下一条指令的地址。跳…...

第4章 神经网络【1】——损失函数

4.1.从数据中学习 实际的神经网络中,参数的数量成千上万,因此,需要由数据自动决定权重参数的值。 4.1.1.数据驱动 数据是机器学习的核心。 我们的目标是要提取出特征量,特征量指的是从输入数据/图像中提取出的本质的数 …...

【Python】第五弹---深入理解函数:从基础到进阶的全面解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、函数 1.1、函数是什么 1.2、语法格式 1.3、函数参数 1.4、函数返回值 1.5、变量作用域 1.6、函数…...

【MQ】如何保证消息队列的高性能?

零拷贝 Kafka 使用到了 mmap 和 sendfile 的方式来实现零拷贝。分别对应 Java 的 MappedByteBuffer 和 FileChannel.transferTo 顺序写磁盘 Kafka 采用顺序写文件的方式来提高磁盘写入性能。顺序写文件,基本减少了磁盘寻道和旋转的次数完成一次磁盘 IO&#xff0…...

RAG是否被取代(缓存增强生成-CAG)吗?

引言: 本文深入研究一种名为缓存增强生成(CAG)的新技术如何工作并减少/消除检索增强生成(RAG)弱点和瓶颈。 LLMs 可以根据输入给他的信息给出对应的输出,但是这样的工作方式很快就不能满足应用的需要: 因…...

用C++编写一个2048的小游戏

以下是一个简单的2048游戏的实现。这个实现使用了控制台输入和输出,适合在终端或命令行环境中运行。 2048游戏的实现 1.游戏逻辑 2048游戏的核心逻辑包括: • 初始化一个4x4的网格。 • 随机生成2或4。 • 处理玩家的移动操作(上、下、左、…...

为何SAP S4系统中要设置MRP区域?MD04中可否同时显示工厂级、库存地点级的数据?

【SAP系统PP模块研究】 一、物料主数据的MRP区域设置 SAP ECC系统中想要指定不影响MRP运算的库存地点,是针对库存地点设置MRP标识,路径为:SPRO->生产->物料需求计划->计划->定义每一个工厂的存储地点MRP,如下图所示: 另外,在给物料主数据MMSC扩充库存地点时…...

Windows10官方系统下载与安装保姆级教程【U盘-官方ISO直装】

Windows 10 官方系统安装/重装 制作启动盘的U盘微软官网下载Win10安装包创建启动盘U盘 安装Win10 本文采用U盘安装Windows10官方系统。 制作启动盘的U盘 微软官网下载Win10安装包 微软官网下载Win10安装包链接:https://www.microsoft.com/zh-cn/software-downloa…...

第05章 07 切片图等值线代码一则

绘制脑部切面图的阈值等值线是一个常见的任务,通常涉及使用VTK(Visualization Toolkit)库来处理医学图像数据。以下是一个基于VTK/C的示例代码,展示如何读取脑部DICOM图像数据,应用阈值过滤器来提取特定组织的等值线&a…...

【深度学习】线性回归的简洁实现

线性回归的简洁实现 在过去的几年里,出于对深度学习强烈的兴趣,许多公司、学者和业余爱好者开发了各种成熟的开源框架。 这些框架可以自动化基于梯度的学习算法中重复性的工作。 目前,我们只会运用: (1)通…...

渗透测试技法之口令安全

一、口令安全威胁 口令泄露途径 代码与文件存储不当:在软件开发和系统维护过程中,开发者可能会将口令以明文形式存储在代码文件、配置文件或注释中。例如,在开源代码托管平台 GitHub 上,一些开发者由于疏忽,将包含数据…...

【R语言】数学运算

一、基础运算 R语言中能实现加、减、乘、除、求模、取整、取绝对值、指数、对数等运算。 x <- 2 y <- 10 # 求模 y %% x # 整除 y %/% x # 取绝对值 abs(-x) # 指数运算 y ^x y^1/x #对数运算 log(x) #log()函数默认情况下以 e 为底 双等号“”的作用等同于identical(…...

小游戏源码开发搭建技术栈和服务器配置流程

近些年各种场景小游戏开发搭建版本层出不穷,山东布谷科技拥有多年海内外小游戏源码开发经验&#xff0c;现为从事小游戏源码开发或游戏运营的朋友们详细介绍小游戏开发及服务器配置流程。 一、可以对接到app的小游戏是如何开发的 1、小游戏源码开发的需求分析&#xff1a; 明…...

深度学习|表示学习|卷积神经网络|输出维度公式|15

如是我闻&#xff1a; 在卷积和池化操作中&#xff0c;计算输出维度的公式是关键&#xff0c;它们分别可以帮助我们计算卷积操作和池化操作后的输出大小。下面分别总结公式&#xff0c;并结合解释它们的意义&#xff1a; 1. 卷积操作的输出维度公式 当我们对输入图像进行卷积时…...

cpp智能指针

普通指针的不足 new和new[]的内存需要用delete和deletel]释放。 程序员的主观失误&#xff0c;忘了或漏了释放。 程序员也不确定何时释放。 普通指针的释放 类内的指针&#xff0c;在析构函数中释放。 C内置数据类型&#xff0c;如何释放? new出来的类&#xff0c;本身如…...

【面试题】 Java 三年工作经验(2025)

问题列表 为什么选择 spring boot 框架&#xff0c;它与 Spring 有什么区别&#xff1f;spring mvc 的执行流程是什么&#xff1f;如何实现 spring 的 IOC 过程&#xff0c;会用到什么技术&#xff1f;spring boot 的自动化配置的原理是什么&#xff1f;如何理解 spring boot 中…...

MOS的体二极管能通多大电流

第一个问题&#xff1a;MOS导通之后电流方向可以使任意的&#xff0c;既可以从D到S&#xff0c;也可以从S到D。 第二个问题&#xff1a;MOS里面的体二极管电流可以达到几百安培&#xff0c;这也就解释了MOS选型的时候很少考虑体二极管的最大电流&#xff0c;而是考虑DS之间电流…...

Node.js下载安装及环境配置教程 (详细版)

Node.js&#xff1a;是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建可扩展的网络应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型&#xff0c;使其非常适合构建实时应用程序。 Node.js 提供了一种轻量、高效、可扩展的方式来构建网络应用程序&#xff0…...

嵌入式MCU面试笔记2

目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道&#xff0c;通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…...

代码随想录算法【Day34】

Day34 62.不同路径 思路 第一种&#xff1a;深搜 -> 超时 第二种&#xff1a;动态规划 第三种&#xff1a;数论 动态规划代码如下&#xff1a; class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n,…...

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》重印P126、P131勘误

勘误&#xff1a;打圈的地方有指数二字。 指数滤波器本身是错误的概念&#xff0c;我在书上打了一个叉&#xff0c;排版人员误删了。 滤波器部分从根本上有问题&#xff0c;本来要改&#xff0c;但是时间不够了。 和廖老师讨论多次后&#xff0c;决定大动。指数滤波器的概念…...

vim多文件操作如何同屏开多个文件

[rootxxx ~]# vimdiff aa.txt bb.txt cc.txt #带颜色比较的纵向排列打开的同屏多文件操作 示例&#xff1a; [rootxxx ~]# vimdiff -o aa.txt bb.txt cc.txt #带颜色比较的横向排列打开的同屏多文件操作 示例&#xff1a; [rootxxx ~]# vim -O aa.txt bb.txt c…...

day6手机摄影社区,可以去苹果摄影社区学习拍摄技巧

逛自己手机的社区&#xff1a;即&#xff08;手机牌子&#xff09;摄影社区 拍照时防止抖动可以控制自己的呼吸&#xff0c;不要大喘气 拍一张照片后&#xff0c;如何简单的用手机修图&#xff1f; HDR模式就是让高光部分和阴影部分更协调&#xff08;拍风紧时可以打开&…...

渗透测试之WAF规则触发绕过规则之规则库绕过方式

目录 Waf触发规则的绕过 特殊字符替换空格 实例 特殊字符拼接绕过waf Mysql 内置得方法 注释包含关键字 实例 Waf触发规则的绕过 特殊字符替换空格 用一些特殊字符代替空格&#xff0c;比如在mysql中%0a是换行&#xff0c;可以代替空格 这个方法也可以部分绕过最新版本的…...

C语言【基础篇】之流程控制——掌握三大结构的奥秘

流程控制 &#x1f680;前言&#x1f99c;顺序结构&#x1f4af; 定义&#x1f4af;执行规则 &#x1f31f;选择结构&#x1f4af;if语句&#x1f4af;switch语句&#x1f4af;case穿透规则 &#x1f914;循环结构&#x1f4af;for循环&#x1f4af;while循环&#x1f4af;do -…...

c++小知识点

抽象类包含至少一个纯虚函数&#xff0c;不能实例化对象。派生类必须实现基类的所有纯虚函数才能成为非抽象类&#xff0c;从而可以实例化对象。可以使用抽象类的指针或引用指向派生类对象&#xff0c;实现多态性调用。抽象类虽然不能直接实例化&#xff0c;但可以拥有构造函数…...

团体程序设计天梯赛-练习集——L1-022 奇偶分家

前言 这几道题都偏简单一点&#xff0c;没有什么计算&#xff0c;10分 L1-022 奇偶分家 给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数…...

vue项目中,如何获取某一部分的宽高

vue项目中&#xff0c;如何获取某一部分的宽高 在Vue项目中&#xff0c;如果你想要获取某个DOM元素的宽度和高度&#xff0c;可以使用原生的JavaScript方法或者结合Vue的特性来实现。以下是几种常见的方法&#xff1a; 使用ref属性 你可以给需要测量宽高的元素添加一个ref属…...

LeetCode - #195 Swift 实现打印文件中的第十行

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

机试题——最小矩阵宽度

题目描述 给定一个矩阵&#xff0c;包含 N * M 个整数&#xff0c;和一个包含 K 个整数的数组。 现在要求在这个矩阵中找一个宽度最小的子矩阵&#xff0c;要求子矩阵包含数组中所有的整数。 输入描述 第一行输入两个正整数 N&#xff0c;M&#xff0c;表示矩阵大小。 接下…...