Skip to content

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”的缩写,即“寄存器到寄存器”。

image-20240321194718909

  1. opcode: operation code , \(opcode_R = 51\)
  2. rd: destination register number
  3. funct3: 3-bit function code (additional opcode)
  4. rs1: the first source register number
  5. rs2: the second source register number
  6. funct7: 7-bit function code (additional opcode)
  • 关于操作选取
    • add <- opcode + funct3 + func7
    • opcode \(\neq\) add, opcode > add
    • opcode $= $ add + sub + ...

为什么要拆开为funct7 ,funct3, opcode三个部分共同决定操作?

因为这样硬件设计更简单,还能归纳电路(一小块电路被多个系统公用),让运行速度更快

image-20240321195608204

I-Format Instructions

I 型指令名称的由来是“Immediate-to-Register”的缩写,即“立即数到寄存器”。

image-20240321195807284

与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

image-20240321200030775

S-Format Instructions

S 型指令名称的由来是“Store”的缩写,即“存储”,用于将寄存器中的数据存储到内存中。

image-20240321200935039

  • 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

image-20240321194718909

目标是内存,所以没有rd(reg)

image-20240321201046040

下表给上面提到的指令举个例子

image-20240321201452798

注意,addi 指令立即数要放在最后面

RISC-V fields

注意看各类指令是干啥的

image-20240321201847606