2.2
:material-circle-edit-outline: 约 384 个字 :material-clock-time-two-outline: 预计阅读时间 1 分钟
Representing Instructions
- All instructions in RISC-V have the same length 32-bit
- RISC-V指令可分为以下几类
- R 型:Reg与Reg的交互
- I 型:Imm到Reg的交互
- S 型:Store,内存交互
R-Format Instructions
R 型指令名称的由来是“Register-to-Register”的缩写,即“寄存器到寄存器”。
- opcode: operation code , \(opcode_R = 51\)
- rd: destination register number
- funct3: 3-bit function code (additional opcode)
- rs1: the first source register number
- rs2: the second source register number
- funct7: 7-bit function code (additional opcode)
- 关于操作选取
- add <- opcode + funct3 + func7
- opcode \(\neq\) add, opcode > add
- opcode $= $ add + sub + ...
为什么要拆开为
funct7
,funct3
,opcode
三个部分共同决定操作?因为这样硬件设计更简单,还能归纳电路(一小块电路被多个系统公用),让运行速度更快
I-Format Instructions
I 型指令名称的由来是“Immediate-to-Register”的缩写,即“立即数到寄存器”。
与R型的区别就是funcy7
, rs2
被合并为了immediate
作为新的二号操作对象
可见立即数容量是\(2^{12}\)
- rs1: source or base address register number
- immediate: constant operand, or offset added to base address
- 2s-complement, sign extended
S-Format Instructions
S 型指令名称的由来是“Store”的缩写,即“存储”,用于将寄存器中的数据存储到内存中。
- rs1: base address register number
- rs2: source operand register number
- immediate: offset added to base address
- Split as [15:11] and [4:0] so that rs1 and rs2 fields always in the same place
与下图的R型对比,可见是
funct7
,rd
被替换为了imm
目标是内存,所以没有rd(reg)
下表给上面提到的指令举个例子
注意,addi
指令立即数要放在最后面
RISC-V fields
注意看各类指令是干啥的