嵌入式系统(三):RISC-V处理器2

RISC-V基础整数指令集

导言

  • RV32I基础指令集命名规则:将有下划线的字母从左到右链接起来,即可完成完整的RV32I指令集。
  • 集合标志{}内列举了指令的所有变体,变体用加下划线的字母或下划线字符_表示。特别的,下划线字符_表示对于此指令不需要用字符表示。
    在这里插入图片描述

RV32I指令格式

六种基本指令格式:

在这里插入图片描述

  • 用于寄存器-寄存器操作的R类型指令
  • 用于短立即数和访存load操作的I型指令
  • 用于访存store操作的S型指令
  • 用于条件跳转操作的B类型指令
  • 用于长立即数的U型指令和用于无条件跳转的J型指令

指令只有六种格式,并且所有的指令都是32位长,这简化了指令解码。

RISC-V指令提供三个寄存器操作数,而不是像x86-32一样,让源操作数和目的操作数共享一个字段。

在RISC-V中对于所有指令,要读写的寄存器的标志符总是在同一位置,意味着在解码指令之前,就可以开始访问寄存器。

这些格式的立即数字段总是符号扩展,符号位总是在指令中最高位。

RV32I寄存器

RV32I右31个寄存器加上1个值恒为0的x0寄存器

简单算术指令(add sub)、逻辑指令(and or xor)移位指令(sll srl sra)和其他ISA差不多,立即数总是进行符号扩展,这样可用立即数表示负数。

RV32I的Load和Store

除了提供32位字lw sw的加载和存储外,还支持加载有符号和无符号字节和半字lb lbu lh lhu和存储字节和半字sb sh

有什么不同之处?

  1. 省略了其他ISA复杂的寻址模式
  2. 寻址不会起始任何数据类型,可以模仿某些x86模式
  3. 没有特殊的堆栈指令
  4. 不支持延迟加载
  5. 不需要边界对齐

条件分支

可以比较两个寄存器并葛军比较结果进行分支跳转。

比较可以是:相等beq,不相等bne,大于等于bge,或小于blt。无符号版本bgeu和bltu

指令长度必须是两个字节的整数倍,分支指令的寻址方式是12位的立即数乘以2,符号扩展它,然后加到PC上作为分支的跳转指令。

有什么不同之处?

去掉了分支延迟,省略了一些循环指令

无条件跳转

跳转并链接指令jal

跳转并链接的寄存器版本jalr

不同之处?

RISC-V使用内存映射I/O,支持字符串处理,实现了字节存取

杂项

  • 控制状态寄存器指令 (csrrc、 csrrs、 csrrw、 csrrci、 csrrsi、 csrrwi),使我们可以轻松地访问一些程- 序性能计数器
  • ecall 指令用于向运行时环境发出请求,例如系统调用。
  • fence 指令对外部可见的访存请求,如设备 I / O 和内存访问等进行串行化。

总结

  • RISC-V继承了这些特性:
  • 32位字节可寻址的地址空间
  • 所有指令均为32位长
  • 31个寄存器,全部32位宽,寄存器0硬连线为零
  • 素有操作都在寄存器之间(没有寄存器到内存的操作)
  • 加载/存储字加上有符号和无符号加载/存储字节和半字
  • 所有算术,逻辑和移位指令都有立即数版本的指令
  • 立即数总是符号扩展
  • 仅提供一种数据寻址模式(寄存器+立即数)和PC相对分支
  • 无乘法或出发指令
  • 一个指令,用于将大立即数加载到寄存器的高位,这样加载32位常量到寄存器只需要两条指令

有何不同?

完整的软件对战只需要RV32I中的基本指令

RV32I具有更简单的基础ISA,具有64位地址版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值