为什么RISC-V的指令结构如此的奇怪

为什么RISC-V的指令结构如此的奇怪

RISC-V 有六种不同的指令集,如下图分别为 R-type / I-type / S-type / B-type / U-type / J-type

在这里插入图片描述

但是为什么像B-type的指令不将立即数的顺序排成类似于 imm[12:1] 而是要搞成像上图中分开的样子呢?
刚开始学习 RISC-V 的时候也是不求甚解的看了一下,直到我无意中看到了一个 stackoverflow 上面的提问。
有兴趣大家可以去看原文

先说结论,其目的为尽量使得各个stype相同,就可以利用同样的硬件资源进行处理,达到节省硬件资源目的。

  1. 为什么12位立即数不是从0开始,而是从1开始?
    因为PC都是4字节对齐的,而 4/8/16 等的二进制表达式中最后两位始终为0. 所以即使立即数右移一位也是用不到立即数的第0位。

  2. 为什么B-type的立即数的顺利不是按照从大到小或者从小到大排列的?
    因为B-type的12位立即数乘以2,也就是左移一位后,为了追求和S-type指令类似的格式。也就是 imm[10:5] imm[4:1]的样子,而最高位通常是符号位,所以 imm[12]就放在了最前面。
    而 imm[11]也就放在了因为imm[0]无效而省略的位置了。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值