RV32I指令集

2024-06-10 12:12
文章标签 指令集 rv32i

本文主要是介绍RV32I指令集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RV32I指令集

  • 一、简介
    • 指令集总览:
    • 扩展指令集:提供整数乘法/除法(M)、原子操作(A)以及单精度(F)和双精度浮点(D)还有压缩指令集(C)
    • 内存:
  • 二、操作数相关
    • 常见操作数类型
    • 汇编代码分段
      • 文本段(text section)
      • 数据段(data section)
      • BSS段
  • 三、RV32I
    • 寄存器
    • 基础指令格式
    • 立即数变体指令
      • B是S格式的变体:
      • J是U格式的变体
      • 不同指令格式的立即数区别:
    • 整数指令
    • Control Transfer Instructions
    • Load and Store Instructions
    • Memory Ordering Instructions
    • Environment Call and Breakpoints
    • HInt指令

一、简介

如果一个组件包含一个独立的指令获取单元,则它被称为核心。
RISC-V兼容核心可能支持多个 RISC-V 兼容的硬件线程,或 harts,通过多线程。

执行环境包括:

  • Bare metal:harts直接由物理处理器实现,线程和指令可以直接访问物理地址空间。
  • RISC-V操作系统:通过多路复用提供多个用户级执行环境的,RISC-V 操作系统用户级 harts 到可用的物理处理器线程并通过控制访问通过虚拟内存到内存
  • RISC-V 虚拟机管理系统,提供多个主管级执行环境操作系统(一种虚拟化技术,在宿主操作系统上运行多个独立的Riscv操作系统实例)
  • RISC-V 仿真环境,例如 Spike、QEMU 或 rv8,它们在底层上模拟RISC-V hartsx86 系统(将Riscv处理器的指令集模拟在计算机的一种环境),可以提供用户级或主管级执行环境。

指令集总览:

RISC-V的基本ISA于RISC架构处理器相似,主要区别在于没有分支延迟槽,支持可选的可变长度的指令编码
RISC-V基本指令集包括:RV32I(32位整型运算)、RV64I(64位整型运算)、RV32E(RV32I 基本指令集的 RV32E
子集变体,主要支持小型嵌入式,整型寄存器只有16个)、RV128I(128位整型位运算)
RISC-V基本指令和指令集扩展的命名有一定的约定

扩展指令集:提供整数乘法/除法(M)、原子操作(A)以及单精度(F)和双精度浮点(D)还有压缩指令集(C)

标准整数乘法和除法扩展名为“M”,并且添加指令以乘除整数寄存器中保存的值。

标准原子指令扩展,用“A”表示,添加了原子读取、修改和写入的指令用于处理器间同步的内存。

标准单精度浮点扩展,用“F”表示,增加了浮点寄存器、单精度计算指令和单精度加载​​和存储。

标准双精度浮点扩展,表示为通过“D”,扩展了浮点寄存器,并增加了双精度计算指令,加载和存储。

标准的“C”压缩指令扩展提供了更窄的16位形式的通用指令。

内存:

RISC-V hart 具有用于所有内存访问的 2^XLEN
字节的单字节可寻址地址空间。

二、操作数相关

在RISC-V中,操作数是指计算机指令中用于进行操作的数据。它可以是寄存器、立即数或内存地址等形式。不同的操作数类型和寻址方式对应不同的指令格

常见操作数类型

以下是RISC-V中常见的操作数类型:

  • 寄存器操作数:指令将读取或写入寄存器中的数据。寄存器操作数通常包括源寄存器(source register)和目标寄存器(destination register),分别表示输入和输出的寄存器。

  • 立即数操作数:指令将使用一个固定的数字作为操作数。立即数操作数可以通过指令本身的二进制编码来表示,也可以在指令中以参数的形式传递给处理器。立即数操作数通常用于表示常量值或偏移量等。

  • 存储器操作数:指令将读取或写入存储器中的数据。存储器操作数需要指定存储器地址,该地址有时由寄存器提供,有时由立即数提供。

以下是RISC-V中常见的操作数寻址方式:

  • 直接寻址方式:直接从寄存器或立即数中获取操作数值。例如,addi rd, rs1, imm 将寄存器rs1中的值与立即数imm相加,并将结果存储到寄存器rd中。

  • 寄存器间接寻址方式:通过寄存器来存储一个地址,从该地址读取操作数。例如,lw rd, 0(rs1) 将以rs1为基址、偏移量为0的存储单元中的数据加载到寄存器rd中。

  • 基址寻址方式:通过寄存器和立即数相加得到一个地址,从该地址读取或写入操作数。例如,sw rs2,offset(rs1) 将寄存器rs2中的值存储到以rs1为基址、偏移量为offset的存储单元中。

这篇关于RV32I指令集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048134

相关文章

字节全员标配的内部指令集鼠标垫,我的粉丝每人包邮送一块

最近很多粉丝后台说 steam 都开夏促了,看公号这么久有啥福利没……年中了是该给大家发点福利,我仔细琢磨了一下,找大厂的朋友要了一套他们撸了多年的 Java 算法逻辑 + 面试要点的私货,于是叫上合作伙伴,加急定制了一波桌面大鼠标垫! 很大…很爽、很实用 这批鼠标垫市面上必然买不到,从供应商给我的设计图来看, B 格还是不错的(拿来垫桌子也很实用)。不卖关子,从事 Java 工作的见者有份,

嵌入式:Arm v7-M指令集架构中的字节序(大小端)

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm=1001.2014.3001.5482         本文来源于博主无意之中的一个发现,虽然之前就知道Cortex-M3默认为小端模式,但是偶然发现了一些出乎意料的情况。         首先来看看Arm v7-M指令集架构中相关的定义。

ARM指令集——状态寄存器访问指令

ARM中有两条指令用于状态寄存器和通用寄存器之间传送数据。程序不能直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令完成程序状态的切换。通常修改状态寄存器时通过“读取-修改-写回”的操作序列来实现的。状态寄存器访问指令包括以下两条指令: MRS 状态寄存器到通用寄存器的传送指令MSR 通用寄存器到状态寄存器的传送指令 下面一一介绍之: 1、MRS

ARM指令集——乘法指令

ARM有两类乘法指令:一类为32位的乘法指令,即乘法操作的结果为32位;另一类位64位的乘法指令,即乘法操作的结果为64位。两类指令共有以下6条: MUL 32位乘法指令MLA 32位带加数的乘法指令SMULL 64位有符号数乘法指令SMLAL 64位带加数的有符号乘法指令UMULL 64位无符号数乘法指令UMLAL 64位带加数的无符号数乘法指令 下面一一介绍之: 1、M

ARM指令集——数据处理指令篇

输出传送指令包括以下指令: MOV 数据传送指令MVN 数据求反传送指令CMP 比较指令CMV 基于相反数的比较指令TST 位测试指令TEQ 相等测试指令ADD 加法指令SUB 减法指令RSB 逆向减法指令ADC 带位加法指令SBC 带位减法指令RSC 带位逆向减法指令AND 安位与指令BIC 为清零指令EOR 逻辑异或指令ORR 逻辑或指令 下面分别作详细介绍: 1、MO

arm接口技术二--指令集与异常处理

arm汇编工程 注意事项: 魔法棒 - listing的两个选项勾上Linker --- Text Start: 指定指针起始地址0x0品按钮 – Folder选择arm-none-eabi编译器assemble编译报错:KEIL中错误FCARM - Output Name not specified, please check ‘Options for Target - Utilit解决方法

C++系统相关操作4 - 获取CPU(指令集)架构类型

1. 关键词2. sysutil.h3. sysutil.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 关键词: C++ 系统调用 CPU架构 指令集 跨平台 实现原理: Unix-like 系统: 可以通过 uname -m 命令获取 CPU 架构类型。Windows 系统: 可以通过环境变量 PROCESSOR_ARCHITECTURE 获取 CPU 架构类型。

01_RISC-V 入门及指令集学习

参考文档 risc-v入门:https://blog.csdn.net/bebebug/article/details/128039038RISC-V OS:https://blog.csdn.net/bebebug/article/details/130551378riscv-spec文档:https://riscv.org/wp-content/uploads/2019/12/riscv-s

使用SSE指令集来优化程序

SSE和SSE2的指令系统非常相似,SSE2比SSE多的仅是少量的额外浮点处理功能、64位浮点数运算支持和64位整数运算支持。     SSE为什么会比传统的浮点运算更快呢?因为它使用了128位的存储单元,这对于32位的浮点数来讲,是可以存下4个的,也就是说,SSE中的所有计算都是一次性针对4个浮点数来完成的。     虽然SSE从理论上来讲要比传统的浮点运算会快,但是所受的限制也很

CPU中的寄存器CPU能理解的指令(指令集)

CPU中的寄存器         寄存器有很多种。如指令寄存器,专门存储指令 问:CPU的寄存器存的是什么? 答:CPU寄存器是中央处理器(CPU)内部的一小部分高速存储资源,用于快速访问和存储各种类型的数据和信息。以下是CPU寄存器通常存储的一些内容: 指令:某些CPU寄存器(如指令寄存器,IR)用于存储当前正在执行的指令。 操作数:操作数寄存器用于存储指令的操作数,这些操作数是计算