首页 > 编程语言 >一起学RISC-V汇编第1讲之指令集架构

一起学RISC-V汇编第1讲之指令集架构

时间:2024-07-16 23:53:26浏览次数:25  
标签:架构 RISC 指令 指令集 寄存器 CISC

准备写几篇学习笔记来讲述RISC-V汇编。

1 指令集架构

指令集架构(Instruction Set Architecture,简称ISA)是一种定义处理器体系结构的规范。定义了处理器能够执行的指令集、寄存器、编码格式、内存访问方式、中断、异常处理等细节。

  1. 指令集:包含数条指令,每条指令都代表一个特定的操作,如加法、乘法、内存读写等;
  2. 寄存器:寄存器用于暂存指令或数据;
  3. 编码格式:表示如何将指令操作、寄存器、立即数等信息组织成具体的二进制指令;
  4. 内存访问方式:指令集架构规定了处理器如何与内存进行交互,包括地址寻址方式、读写操作等;
  5. 特权级别:指令集架构可能定义了多个特权级别,用于区分不同的操作权限,例如用户态和内核态;
  6. 扩展指令集:一些指令集架构支持扩展指令集,可以根据特定需求添加新的指令,以提高特定应用程序性能。

常见的指令集架构包括x86、ARM、RISC-V、LoongArch等。不同的处理器可能采用不同的指令集架构,因此编写的软件必须符合指令集规范才能在对应的处理器上运行。指令集架构的选择对于处理器性能、功耗、兼容性等方面都有影响,因此在设计处理器系统时需要考虑各种因素来选择适合的指令集架构。

2 复杂指令集与精简指令集

指令集架构可以简单的分为:

  • 复杂指令集(Complex Instruction Set Computer,CISC)
  • 精简指令集(Reduced Instruction Set Computer,RISC)。

最早出现的是CISC,既有简单指令也有复杂指令,人们发现常用的指令只占20%(正如常用的汉字只有2,3千个一样,符合二八法则),这20%的指令都是简单指令,并且通过简单指令组合可以实现复杂指令相同的功能,所以没必要花太多时间去实现复杂指令,这样就诞生了RISC指令。

RISC指令设计理念是:常用的指令做得快,少用的指令只要功能正确就行,即RISC只包含常用的简单指令,对于不常用复杂的操作,则通过执行几条简单指令组合来达到相同效果。

CISC 与 RISC的区别如下:

VS 复杂指令集(CISC) 精简指令集(RISC)
指令数量
指令系统复杂度 复杂 简单
指令长度 变长,不固定 等长,固定
寻址方式
指令格式 少且规整
各指令使用频率 相差很大 相差不大
指令执行时间 相差很大 相差不大
指令周期 多周期为主 单周期为主(流水线技术,大部分指令在一个机器周期完成)
cpu寄存器数量 多(增加寄存器,以减少访存)
指令并行性
可访存指令 不加限制 只有load/store等访存指令才能访问内存(减少了访存周期)
优化编译实现 很难 较容易(依靠编译程序的优化来更有效的支持高级语言)
代表架构 x86 ARM,MIPS,PowerPC,LoongArch,RISC-V等

RISC精简指令不仅有利于硬件的高效实现,还有利于通过流水线、多发射、乱序执行等技术来提高效率,所以,像x86这种CISC架构,也在不断趋于RISC风格,即x86会把一些比较复杂的指令预译码成多笔简单指令操作
简单理解:CISC = 预译码 + RISC,以便更有效的使用流水线等技术,不由的感叹一下,CISC负重前行,需要考虑向前兼容,不然直接投奔RISC更简单一些。

RISC-V是第5代精简指令集,属于RISC的一种实现。

3 什么场合需要使用RISC-V汇编指令?

汇编指令难写难读,但在一些场合我们很难完全避免不使用汇编指令,如下是使用汇编指令的一些场合:

使用场合 具体示例
完成高级语言(C/C++等)无法实现的功能 在进入C/C++语言main函数之前需要准备函数栈、初始化变量等,这些只能使用汇编;
OS的进程切换,需要直接操作寄存器,只能使用汇编语言;
获取当前PC值等需要直接操作寄存器的操作,只能用汇编语言
需要严格限制二进制文件的大小 嵌入式设备(如电话、打印机、门禁设备等)内存要求较严格,如果使用高级语言编写,经过编译后,可能存在大量的函数调用开销,动态库加载等,如果直接使用汇编语言,可以编写脱离库(libc库)的嵌入式程序,这种内存占用肯定是最小的。
性能分析与优化 比如优化库函数:memset、memcpy等;
使用SIMD指令(risc-v中的pv扩展等)对算法进行优化
定位分析问题 有些问题可能与编译器优化有关,需要对照反汇编来分析

参考:

  1. 指令集架构知识汇总 - 知乎 (zhihu.com)
  2. 计组 | RISC与CISC
  3. 《汇编语言编程基础 基于LoongArch》

标签:架构,RISC,指令,指令集,寄存器,CISC
From: https://www.cnblogs.com/sureZ-learning/p/18306357

相关文章

  • 一起学RISC-V汇编第2讲RISC-V之march与mabi
    这一章讲一些RISC-V的一些零碎知识点,后面章节可能要用到这些概念。1RISC-V的各种扩展marchx86与arm是增量型ISA,意味着新处理器需要兼容过去所有的指令,这样会导致ISA指令随时间流逝而大幅增长。而RISC-V被设计为模块化的,这与过去几乎所有的ISA都不同,其核心是RV32I的基础ISA,......
  • 一起学RISC-V汇编第3讲之寄存器
    寄存器是处理器中最常用的处理单元,RISC-V指令的操作数除了立即数就是寄存器。RISC-V指令集包含了多种不同类型的寄存器,用于不同目的和功能:对于rv32imafd架构而言,包含如下寄存器:通用寄存器:32个通用整数寄存器,分别标记为x0-x31,如果是fd扩展,还有32个独立的浮点寄存器,分别标记为f......
  • “论软件维护方法及其应用”精选范文,软考高级论文,系统架构设计师论文
    论文真题软件维护是指在软件交付使用后,直至软件被淘汰的整个时间范围内,为了改正错误或满足新的需求而修改软件的活动。在软件系统运行过程中,软件需要维护的原因是多种多样的,根据维护的原因不同,可以将软件维护分为改正性维护、适应性维护、完善性维护和预防性维护。在维......
  • 【大模型】 NVIDIA GPU 架构与性能解析:从V100到H100的进化之路
    NVIDIAGPU架构与性能解析:从V100到H100的进化之路一、GPU架构概览二、GPU核心参数详解三、GPU型号对比四、NVIDIAGPU的互联技术五、案例分析六、结论在人工智能和高性能计算的前沿阵地,GPU(图形处理器)正扮演着越来越重要的角色。尤其是NVIDIA的GPU,凭借其强大的并行......
  • 存储系列DAS,SAN,NAS常见网络架构
    随着主机、磁盘、网络等技术的发展,对于承载大量数据存储的服务器来说,服务器内置存储空间,或者说内置磁盘往往不足以满足存储需要。因此,在内置存储之外,服务器需要采用外置存储的方式扩展存储空间,今天在这里我们分析一下当前主流的存储架构。一、DASDirectAttachedStorage,直接连......
  • webpack2源码架构设计与构建流程
    入口初始化入口文件lib/webpack.jsfunctionwebpack(options,callback){ letcompiler; if(Array.isArray(options)){ compiler=newMultiCompiler(options.map(options=>webpack(options))); }elseif(typeofoptions==="object"){//......
  • RDMA 高性能架构基本原理与设计方案
    RDMA的主要优点包括低延迟、高吞吐量、减少CPU负担和支持零拷贝网络。它允许数据直接在网络接口卡(NIC)和内存之间传输,减少了数据传输过程中的中间环节,从而显著降低了延迟。RDMA技术能够实现高速的数据传输,适用于需要大量数据交换的应用场景。由于数据传输不需要CPU的参与,CPU可......
  • 8-基于双TMS320C6678 + XC7K420T的6U CPCI Express高速数据处理平台 双DSP 6U CPCI架
    基于双TMS320C6678+XC7K420T的6UCPCIExpress高速数据处理平台 1、板卡概述板卡由北京太速科技自主研发,基于6UCPCI架构,处理板包含双片TIDSPTMS320C6678芯片;一片Xilinx公司FPGAXC7K420T-1FFG1156芯片;六个千兆网口(FPGA两个,DSP四个);DSP与FPGA之间Rap......
  • 架构与思维:微服务架构的思想本质
    我们为什么需要微服务架构,它一定是为了解决我们某些问题才出现了。这篇文章我们讨论下微服务架构模式所解决的问题,带来的挑战,以及他的核心思想本质。1早期的服务架构上图是一个典型的服务分层架构:Client:调用方是browserweb或者App应用层:实现计算层的业务逻辑,从上游数据层......
  • lamp基本架构+wordpress
    一、安装并设置MariaDB1、时钟同步先安装chrony,重启并设置enable,最后同步yum-yinstallchrony2、安装mariadb和httpdyum-yinstallhttpdmariadbmariadb-server将httpd和mariadb重新启动并enable3、设置mariadb数据库进入数据库进行初始化mysql_secure_......