riscv 指令集与寄存器

指令集

RV32指令集 和 RV64指令集 并不是单独的 一类指令集的集合,而很多类指令集的集合

RV32指令集 : RV32IMAFDC(即RV32GC)
RV64指令集 : RV64IMAFDC(即RV64GC)

RV64 指令集 和 RV32 指令集 都是 编码 为 32bit(除了RV32C(压缩)指令集编码为16bit) 

寄存器分类

1. CSR(4096个,包括你见到的除了x1类和f1类之外的所有寄存器,类似mstatus,用RVzicsr指令集访问)
2. 通用寄存器(32个)
3. 浮点寄存器(32个)

RV64 和 RV32 用的是不同的寄存器
RV64I  用的是 64bit 长度的 32个 X0-X31 通用寄存器
RV64FD 增加了 64bit 长度的 32个 F0-F31 通用寄存器
---
RV32I  用的是 32bit 长度的 32个 X0-X31 通用寄存器
RV32FD 增加了 32bit 长度的 32个 F0-F31 通用寄存器

参考文章


base

RV32I指令集的目的是尽量简化硬件的实施设计,所以它只有40条指令(备注,之前是47条指令,在最新的规范中,一些csr指令被放在扩展指令集中)。
这40条指令几乎能够模拟其它任何扩展指令(除了A扩展指令,因为原子指令需要硬件支持)。

实际上要实现机器模式的RiscV特权架构,还需要6条csr指令,之前这些指令都是在RV32I中的,现在被放在扩展指令集 Zicsr中了。
所以说要实现一个完整的RiscV系统,至少要实现RV32I+Zicsr指令集。


如果用更简单的实现方式
	比如对于ECALL和EBREAK指令,调用时候,系统总是自陷(trap),所以可以减一条指令
	以及用NOP指令模拟Fence指令(备注:在RISC V中,NOP指令是伪代码,其实就是addi, x0,x0,0,所以可以减一条指令
	则RV32I甚至可以减少到38条指令


RV32I是32位基础整数指令集,它支持32位寻址空间,支持字节地址访问,仅支持小端格式(little-endian,高地址高位,低地址地位),寄存器也是32位整数寄存器。
在RV32I指令集架构中,包括32个通用目的寄存器,其中x0被预留为常数0,其它31个寄存器(x1-x31)是普通的通用整数寄存器。在Risc-V汇编语言中,每个通用寄存器都有一个对应的ABI名字,也就是说在汇编语言中,x1等价于ra,它们都会汇编成相同的机器码。对于RV32I,通用寄存器是32位的寄存器,xlen=32;对于RV64I,通用寄存器是64位寄存器,xlen=64
mret
sret
wfi
sfence.vma

optional

Guess you like

Origin blog.csdn.net/u011011827/article/details/121371305