RV32I指令集

一、简介

如果一个组件包含一个独立的指令获取单元,则它被称为核心。
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的存储单元中。

  • 相对寻址方式:通过相对于当前指令的偏移量来访问内存地址。例如,beq rs1, rs2, label如果rs1等于rs2,则跳转到标记为label的程序位置(pc)。</

相关推荐

  1. RV32I指令

    2024-06-11 22:58:02       25 阅读
  2. FENCE.I指令

    2024-06-11 22:58:02       29 阅读
  3. STM32外设编程指南:GPIO、UART、SPI和I2C

    2024-06-11 22:58:02       40 阅读
  4. STM<span style='color:red;'>32</span> <span style='color:red;'>I</span>2C

    STM32 I2C

    2024-06-11 22:58:02      49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 22:58:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 22:58:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 22:58:02       87 阅读
  4. Python语言-面向对象

    2024-06-11 22:58:02       96 阅读

热门阅读

  1. Redis的过期策略以及内存淘汰机制

    2024-06-11 22:58:02       29 阅读
  2. 关于Spring Cacheable注解的讨论

    2024-06-11 22:58:02       38 阅读
  3. Rust reqwest 简明教程

    2024-06-11 22:58:02       35 阅读
  4. 【Qt 实现 QCryptographicHash 加密数据的步骤】

    2024-06-11 22:58:02       25 阅读