寄存器位长度
RV32I通用寄存器文件
- 整数寄存器:32×32位,x0~x31
- 浮点寄存器:32×32位,f0~f31(不关心整数指令集)
- ABI:指定各个寄存器的使用约定, 注册别名
![](/upload/images/22139567-3)
![](/upload/images/22139567-4)
3。 RV32I指令格式
- 指令格式共有 6 种,长度固定为 32 位
- 操作码字段:操作码,7 位,固定为指令字的最低 7 位,指定指令的格式类型
- 功能码字段:funct3、funct7,用于定义某类指令的具体指令(区分功能)
- 寄存器字段:3个,各5位,原始寄存器rs1/rs2,目的寄存器寄存器rd,位置固定
- 立即数域:imm,12位/20位,需要扩展为32位立即数imm32
![](/upload/images/22139567-5)
![](/upload/images/22139567-6)
![](/upload/images/22139567-7)
![](/upload/images/22139567-8)
![](/upload/images/22139567-9)
![](/upload/images/22139567-10)
![](/upload/images/22139567-11)
即时数据生成规则
![](/upload/images/22139567-12)
4。 21条操作说明
10 R型操作说明:寄存器
![](/upload/images/22139567-13)
- 功能:对寄存器数据进行算术逻辑运算,并将运算结果写入目的寄存器
9 I型操作指令:立即
![](/upload/images/22139567-14)
- 功能:对寄存器和扩展立即数进行算术逻辑运算,并将结果写入目的寄存器
2条U型数据处理指令:大立即数指令
![](/upload/images/22139567-15)
- lui:加载上立即数
- auipc:将上立即数添加到pc
5。 8条内存访问指令
5 I型加载指令:从内存加载
![](/upload/images/22139567-16)
- lb:加载字节
- lh:加载半字
- lw:加载字
- lbu:加载无符号字节
- lhu:加载无符号半字
- 功能:从内存读取数据 输入注册
3个S形存储指令:存储到内存
![](/upload/images/22139567-17)
- sb:存储字节
- sh:存储半字
- sw:存储字
- 功能:将寄存器数据写入cunchuq
六、八条转账指令
2个J型/I型跳转链接指令
![](/upload/images/22139567-18)
6 B类条件分支指令:转移控制
![](/upload/images/22139567-19)
- beq:如果相等则转移
- bne:如果不等于则转移
- blt:如果小于则转移
- bge:如果大于或等于则转移
- bltu:如果小于then-无符号则转移
- bgeu:如果伟大或等于无符号则转移
七、十其他说明
2条内存屏障指令
![](/upload/images/22139567-20)
6个系统命令
![](/upload/images/22139567-21)
2个断点指令
![](/upload/images/22139567-22)
8。 RV32I的寻址方式
RV32I指令集操作数:有立即数、寄存器和存储器三种类型
寻址方式:立即数寻址、寄存器寻址、基址寻址、相对寻址
直接寻址:由指令中的立即数字段指定,需要扩展为32位立即数
![](/upload/images/22139567-23)
寄存器寻址:在整数寄存器中,5位寄存器编号rs1、rs2、rd由指令
给出
![](/upload/images/22139567-24)
基地址寻址:用于存储和检索指令
- 操作数:在主存的某个单元中,EA = (rs1) + offset(偏移量)
- 指令:给出 rs1 的 5 位数和 12 位偏移量(立即数域)
- 偏移量:立即数据扩展后需要转换为32位偏移量,即EA = (rs1) + SE32(imm32)
![](/upload/images/22139567-25)
相对寻址:用于J类、B类无条件转移指令和条件分支指令
- 分支目标地址:PC与偏移量之和,偏移量在指令中给出
![](/upload/images/22139567-26)