目录
一、RISC-V架构概述
二、RV32I指令集概述
三、RV32I指令格式
四、21条运算指令
五、8条访存指令
六、8条转移指令
七、10条其他指令
八、RV32I的寻址方式
一、RISC-V架构概述
RISC-V指令集起源:
- 全新的、具有典型RISC特征的指令集架构,2010年加州大学伯克利分校发明,“RISC”指精简指令集计算机,“V”指从RISC-I开始的第五代指令集
- ARM、MIPS、SPARC、X86等各种指令集架构存在缺陷(多年发展后变得繁冗,且有高昂的专利和架构授权),RISC完全免费开放,标准手册与架构文档共享在网站 www.riscv.org 上
- RISC性能优越,能够满足从微控制器到超级计算机等各种复杂程度的处理器需求
- RISC支持从FPGA、ASIC乃至未来器件等多种实现方式,能够高效实现各种微结构,支持定制与加速功能,兼容目前各种现有软件及编程语言
CISC与RISC对比
二、RV32I指令集概述
- 指令字长ILEN:固定32位
- 整数表示:采用补码
- 整数寄存器个数:32个
- 指令编码的存储格式:小端模式
- 指令条数:47条
- 寄存器位长XLEN = 机器字长
- 地址空间 = 2 ^ XLEN
RV32I通用寄存器堆
- 整数寄存器:32×32位,x0~x31
- 浮点寄存器:32×32位,f0~f31(整数指令集不关注)
- ABI:规定了每个寄存器的使用约定、寄存器别名
三、RV32I指令格式
- 指令格式共6种类型,固长32位
- 操作码字段:opcode,7位,固定在指令字的最低7位,指定指令的格式类型
- 功能码字段:funct3、funct7,用于定义某类指令的具体指令(区分功能)
- 寄存器字段:3个,各5位,原寄存器rs1 / rs2、目的寄存器rd,有固定位置
- 立即数字段:imm,12位 / 20位,需要扩展成32位的立即操作数imm32
立即数生成规则
四、21条运算指令
10条R型运算指令:Register
- 功能:对寄存器数据进行算术逻辑运算,运算结果写入目的寄存器
9条I型运算指令:Immediate
- 功能:对寄存器与扩展后立即数进行算术逻辑运算,将结果写入目的寄存器
2条U型数据处理指令:大立即数指令
- lui:load upper immediate
- auipc:add upper immediate to pc
五、8条访存指令
5条I型装数指令:Load from Memory
- lb:load byte
- lh:load half word
- lw:load word
- lbu:load byte unsigned
- lhu:load half word unsigned
- 功能:从存储器读出数据装入寄存器
3条S型存数指令:Store to Memory
- sb:store byte
- sh:store half word
- sw:store word
- 功能:将寄存器数据写入cunchuq
六、8条转移指令
2条J型/I型跳转并链接指令
- jal:jump and link
- jalr:jump and link-rs1
6条B型条件分支指令:转移控制
- beq:branch if equal
- bne:branch if not equal
- blt:branch if less then
- bge:branch if great or equal
- bltu:branch if less then-unsigned
- bgeu:branch if great or equal-unsigned
七、10条其他指令
2条存储器屏障指令
6条系统指令
2条断点指令
八、RV32I的寻址方式
RV32I指令集操作数:有立即数、寄存器和存储器三种类型
寻址方式:立即寻址、寄存器寻址、基址寻址、相对寻址
直接寻址:由指令中的立即数字段指定,需要拓展为32位立即数
寄存器寻址:在某个整数寄存器中,由指令给出5位寄存器编号rs1、rs2、rd
基址寻址:用于存数和取数指令
- 操作数:在主存的某个单元中,EA = (rs1) + 偏移量(offset)
- 指令:给出rs1的5位编号和12位偏移量(立即数字段)
- 偏移量:需要经过立即数扩展变成32位偏移量,即 EA = (rs1) + SE32(imm32)
相对寻址:用于J型和B型无条件转移指令和条件分支指令
- 转移目标地址:PC和偏移量之和,指令中给出偏移量