RISC-V 指令格式

RISC-V 宗旨 —— 简约

RISC-V 指令集架构(ISA)作为新一代开源指令集架构,是一个最新的、简约的、清晰的、开源的指令集架构。RISC-V 指令集架构的目标是让它在最小的到最快的所有计算机设备上都能够有效工作。RISC-V 指令集架构强调简洁性来保证它的低成本,同时有着大量的寄存器和透明的指令执行速度,从而帮助编译器和汇编语言程序员将实际的重要问题转换为适当的高效代码。

计算机指令即:汇编指令代码

计算机指令是能够被计算机识别并执行的二进制代码,它规定了计算机能完成的某种操作;

计算机指令通常由两部分操作:操作码和操作数(地址码)。

操作码操作数(地址码)

在这里插入图片描述

  1. 操作码 opcode

    • 指令中的操作码:指出该指令需要完成操作的类型或性质;
    • 例如,取数、加法、减法、输出等不同的操作具有不同的操作码;
    • 指令中操作码的二进制位数决定了该种计算机最多能具有的指令条数(即操作种类);
  2. 地址码

    • 指令中的地址码:用来描述该指令的操作对象
    • 或者直接给出操作数
    • 或者指出操作数的存储器地址或寄存器地址(即寄存器名)
    • 根据指令中操作码的性质,操作数又分为源操作数和目的操作数;
    • 例如:在一般的加法指令中又3个操作数,其中加法和被加数为源操作数,计算结果为目的操作数;
    • 在大多数指令中,指令中给出的操作数一般是存放数据的地址,而并不是具体数据本身,甚至在有些指令中实际上给出的只能是地址而不是数据;
    • 每一条指令的地址码个数是不同的

1、RISC-V 指令类型

计算机指令所占的字节数是各不相同的,只占一个字节的指令称为单字节指令,占两个字节的指令称为双字节指令,一般来说,如果指令中的操作码和操作数(即地址码)共占 n 个字节,则称该指令为 n 字节指令,RISC-V指令集的所有的指令都是32位长度,这简化了指令解码的工作。

ARM-32 和 x86-32 都有许多不同的指令格式,这使得解码部件在硬件中实现较昂贵,在中高端处理器设计中容易带来性能挑战。

RISC-V 指令具有六种基本指令格式:

  • R 类型指令:用于寄存器 - 寄存器操作;
  • I 类型指令:用于短立即数和访存 load 操作;
  • S 类型指令:用于访存 store 操作;
  • B 类型指令:用于条件跳转操作;
  • U 类型指令:用于长立即数操作;
  • J 类型指令:用于无条件操作;

在这里插入图片描述
在这里插入图片描述

为方便程序员,所有位全部为0 是非法的 RV32I 指令,因此试图跳转到被清零的内存区域的错误跳转将会立即触发异常,这可以协助调试;类似的所有位全部都是1的指令也是非法指令,它将捕获其他常见的错误。

RISC-V 指令提供3个寄存器操作数,而不像 x86-32一样,让源操作数和目的操作数共享一个字段。让一个操作天然就需要有三个不同的操作数,但是指令集架构(ISA)只提供了两个操作数时,编译器或者汇编程序员就需要多使用一条 move 指令来保存目的寄存器的值。

在 RISC-V 中对于所有指令,要读写的寄存器的标识符总是在同一个位置,这不仅对解码部件要求降低,而且也意味着在解码指令之前,就可以先开始访问寄存器。

指令格式中的立即数字段总是符号扩展,符号位总是在指令中最高位,这意味着可能成为关键路径的立即数符号扩展,可以在指令解码之前进行。

2、计算机指令的寻址方式

指令中操作数的真实地址称为有效地址,它是由寻址方式和形式地址共同来决定的。

寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令的地址,与硬件结构密切相关。寻址方式分为指令寻址和数据寻址两大类。

指令寻址分为顺序寻址和跳转寻址两种。

常见的数据寻址方式包括立即寻址、直接寻址、隐含寻址以及更复杂的寻址方式,如:间接寻址、寄存器寻址、寄存器间接寻址和堆栈寻址等方式。

3、指令执行的基本过程

计算机的工作就是自动快速地执行程序。在计算机中,用程序计数器(PC)来决定程序中各条指令的执行顺序。在计算机开始执行程序时,程序计算器为该执行程序的第一条指令所在的内存单元地址,此后按照如下步骤依次执行程序中的各指令。

  1. 取指令
    按照程序计数器中的地址,从内存器中取出当前要执行的指令送到指令寄存器;
  2. 解析指令
    对指令寄存器中的指令进行解析,由译码器对指令中的操作码进行译码,将指令中的操作码转换成相应的控制信息。由指令中的地址码确定操作数存放的地址;
  3. 执行指令
    由操作控制电路发出完成该操作所需要的一系列控制信息,对由源地址码所指出的源操作数做该指令所要求的的操作,并将操作结果存放到由目的地址码所指出的地方。
  4. 修改程序计数器
    一条指令执行完后,根据程序的要求修改程序计算器(PC)的值,如果当前执行完的指令中不产生转移地址,则将程序计数器(PC)加 n (当前执行完的指令是 n 字节指令);如果当前执行完的指令是转移指令,则将转移地址送入程序计数器,最后转(1)继续执行。

CPU 从内存中取出一条指令解析并执行,一条指令执行完后,再从内存取出下一条指令分析并执行。CPU 不断地取指令、分析指令、执行指令,这就是程序的执行过程。

ViatorSun CSDN认证博客专家 深度学习 计算机视觉
研究生在读、Github开源世界贡献者,深度学习 & 计算机视觉分享者;
主要研究【深度学习 & 计算机视觉】相关方向,欢迎感兴趣的小伙伴一起交流、探讨~
相关推荐
RISC-V指令集 中文版 2.1版 目录 第 1 章 介绍 ........................................................................................................................... 1 1.1 RISC-V ISA 概述 ......................................................................................................... 3 1.2 指令长度编码 ........................................................................................................... 5 1.3 异常、自陷和中断 ................................................................................................... 6 第 2 章 RV32I 基本整数指令集,2.0 版 .............................................................................. 8 2.1 基本整数子集的程序员模型 ................................................................................... 8 2.2 基本指令格式 ........................................................................................................... 9 2.3 立即数编码变种 ..................................................................................................... 10 2.4 整数计算指令 ......................................................................................................... 11 整数寄存器-立即数指令................................................................................................ 12 整数寄存器-寄存器操作................................................................................................ 13 NOP 指令 ........................................................................................................................ 14 2.5 控制转移指令 ......................................................................................................... 14 无条件跳转 ..................................................................................................................... 14 条件分支 ......................................................................................................................... 15 2.6 Load 和 store 指令 .................................................................................................. 17 2.7 存储器模型 ............................................................................................................. 18 2.8 控制和状态寄存器指令 ......................................................................................... 20 CSR 指令 ......................................................................................................................... 20 定时器和计数器 ............................................................................................................. 22 环境调用和断点 ............................................................................................................. 23 第 3 章 RV32E 基本整数指令集,版本 1.9 ....................................................................... 24 3.1 RV32E 程序员模型 ................................................................................................. 24 3.2 RV32E 指令集 ......................................................................................................... 24 3.3 RV32E 扩展 ............................................................................................................. 25 第 4 章 RV64I 基本整数指令集,版本 2.0 ........................................................................ 26 4.1 寄存器状态 ............................................................................................................. 26 4.2 整数计算指令 ......................................................................................................... 26 整数寄存器-立即数指令................................................................................................ 26 整数寄存器-寄存器操作................................................................................................ 28 4.3 Load 和 Store 指令 ................................................................................................. 28 4.4 系统指令 ................................................................................................................. 29 第 5 章 整数乘法除法的“M”标准扩展,版本 2.0 ....................................................... 30 5.1 乘法操作 ................................................................................................................. 30 5.2 除法操作 ................................................................................................................. 30 第 6 章 原子性指令的“A”标准扩展,版本 2.0 ............................................................. 32 6.1 原子性操作的指定顺序 ......................................................................................... 32 6.2 Load-reserved/store-conditional 指令 .................................................................... 33 6.3 原子性存储器操作 ................................................................................................. 36 第 7 章 单精度浮点的“F”标准扩展,版本 2.0 ............................................................. 38 7.1 F 寄存器状态 .......................................................................................................... 38 7.2 浮点控制和状态寄存器 ......................................................................................... 39 Copyright ©2010-2016, The Regents of the University of California. All rights reserved. v 7.3 NaN 生成和传递 ..................................................................................................... 40 7.4 非规格化数算术 ..................................................................................................... 41 7.5 单精度 load 和 store 指令...................................................................................... 41 7.6 单精度浮点计算指令 ............................................................................................. 41 7.7 单精度浮点转换和传输指令 ................................................................................. 42 7.8 单精度浮点比较指令 ............................................................................................. 44 7.9 单精度浮点分类指令 ............................................................................................. 44 第 8 章 双精度浮点的“D”标准扩展,版本 2.0 ............................................................ 46 8.1 D 寄存器状态 ......................................................................................................... 46 8.2 双精度 load 和 store 指令...................................................................................... 46 8.3 双精度浮点计算指令 ............................................................................................. 47 8.4 双精度浮点转换和传输指令 ................................................................................. 47 8.5 双精度浮点比较指令 ............................................................................................. 49 8.6 双精度浮点分类指令 ............................................................................................. 49 第 9 章 RV32/64G 指令集列表 ........................................................................................... 50 第 10 章 扩展 RISC-V ............................................................................................................. 55 10.1 扩展术语 ................................................................................................................. 55 标准 vs. 非标准扩展 .................................................................................................... 55 指令编码空间和前缀 ..................................................................................................... 55 绿地扩展 vs. 棕地扩展 ................................................................................................ 56 标准兼容的全局编码 ..................................................................................................... 57 保证的非标准编码空间 ................................................................................................. 57 10.2 RISC-V 扩展设计理念 ............................................................................................. 57 10.3 在固定 32 位指令格式内的扩展 ........................................................................... 58 可用的 30 位指令编码空间 ........................................................................................... 58 可用的 25 位指令编码空间 ........................................................................................... 58 可用的 22 位指令编码空间 ........................................................................................... 58 其他空间 ......................................................................................................................... 58 10.4 增加对齐的 64 位指令扩展 ................................................................................... 59 10.5 支持 VLIW 编码 ...................................................................................................... 59 定长指令组 ..................................................................................................................... 59 编码长度指令组 ............................................................................................................. 59 固定大小指令束 ............................................................................................................. 59 前缀中“组结束位” ..................................................................................................... 60 第 11 章 ISA 子集命名约定 ................................................................................................... 61 11.1 大小写敏感 ............................................................................................................. 61 11.2 基本整数 ISA ........................................................................................................... 61 11.3 指令扩展名字 ......................................................................................................... 61 11.4 版本号 ..................................................................................................................... 61 11.5 非标准扩展命名 ..................................................................................................... 62 11.6 管理员级指令子集 ................................................................................................. 62 11.7 管理员级扩展 ......................................................................................................... 62 11.8 子集命名约定 ......................................................................................................... 62 第 12 章 四精度浮点的“Q”标准扩展,版本 2.0 ............................................................ 64 Copyright ©2010-2016, The Regents of the University of California. All rights reserved. vi 12.1 四精度 load 和 store 指令...................................................................................... 64 12.2 四精度计算指令 ..................................................................................................... 64 12.3 四精度转换和传输指令 ......................................................................................... 65 12.4 四精度浮点比较指令 ............................................................................................. 66 12.5 四精度浮点分类指令 ............................................................................................. 67 第 13 章 十进制浮点的“L”标准扩展,版本 0.0 ............................................................. 68 13.1 十进制浮点寄存器 ................................................................................................. 68 第 14 章 压缩指令的“C”标准扩展,版本 1.9 ................................................................. 69 14.1 概述 ......................................................................................................................... 69 14.2 压缩指令格式 ......................................................................................................... 71 14.3 Load 和 store 指令 .................................................................................................. 72 基于栈指针的 load 和 store .......................................................................................... 73 基于寄存器的 Load 和 store .......................................................................................... 74 14.4 控制转移指令 ......................................................................................................... 75 14.5 整数计算指令 ......................................................................................................... 76 整数常数-生成指令 ....................................................................................................... 76 整数寄存器-立即数指令................................................................................................ 77 整数寄存器-寄存器指令................................................................................................ 79 预定义非法指令 ............................................................................................................. 80 NOP 指令 ........................................................................................................................ 80 断点指令 ......................................................................................................................... 81 14.6 在 LR/SC 序列中使用 C 指令 ................................................................................. 81 14.7 RVC 指令集列表 ..................................................................................................... 81 14.8 指令压缩统计 ......................................................................................................... 85 14.9 优化寄存器保存/恢复代码大小 ........................................................................... 88 第 15 章 向量操作的“V”标准扩展,版本 0.0 ................................................................. 90 第 16 章 位操作的“B”标准扩展,版本 0.0 ....................................................................... 91 第 17 章 事务存储器的“T”标准扩展,版本 0.0 ............................................................. 92 第 18 章 打包 SIMD 指令的“P”标准扩展,版本 0.1 ...................................................... 93 第 19 章 RV128I 基本整数指令集,版本 1.7 ...................................................................... 95 第 20 章 调用约定 ................................................................................................................. 96 20.1 C 数据类型和对齐 .................................................................................................. 96 20.2 RVG 调用约定 ......................................................................................................... 96 20.3 软浮点调用约定 ..................................................................................................... 99 20.4 RV32E 调用约定 ..................................................................................................... 99 第 21 章 RISC-V 汇编程序员手册 ....................................................................................... 100 第 22 章 历史和致谢 ........................................................................................................... 102 22.1 到 ISA 手册 1.0 版本以前的历史 ......................................................................... 102 22.2 从 ISA 手册 2.0 版本以来的历史 ......................................................................... 102 致谢 ............................................................................................................................... 104 22.3 版本 2.1 的历史 .................................................................................................... 104 致谢 ............................................................................................................................... 104 22.4 资助 ....................................................................................................................... 104 参考文献....................................................................................................................................... 106
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页