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

发布时间:2024年01月23日

为什么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]无效而省略的位置了。

文章来源:https://blog.csdn.net/Megahertz66/article/details/135791978
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。