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

news2025/1/6 20:46:00

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1406124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Neos的渗透测试靶机练习——DarkHole-2

DarkHole-2 一、实验环境二、开始渗透1. 搜集信息2. git文件泄露3. SQL注入4. 提权 三、总结 一、实验环境 虚拟机软件:VirtualBox 攻击机:kali linux(网卡初始为仅主机模式,要有安全意识) 靶机:DarkHole-…

【数据结构】 顺序栈的基本操作 (C语言版)

目录 一、顺序栈 1、顺序栈的定义: 2、顺序栈的优缺点 二、顺序栈的基本操作算法(C语言) 1、宏定义 2、创建结构体 3、顺序栈的初始化 4、顺序栈的入栈 5、顺序栈的出栈 6、取栈顶元素 7、栈的遍历输出 8、顺序栈的判空 9、顺…

记一次Flink通过Kafka写入MySQL的过程

一、前言 总体思路:source -->transform -->sink ,即从source获取相应的数据来源,然后进行数据转换,将数据从比较乱的格式,转换成我们需要的格式,转换处理后,然后进行sink功能,也就是将数…

Linux:vim的相关知识

目录 vim 是一个较为常见的编译文件的命令操作。 三种模式的区分的作用如下: 命令模式: 插入模式: 进入插入模式的标志:左下角有INSERT 底行模式: 命令模式的常见命令: 底行模式常见命令&#xff1…

解析找不到msvcr110.dll,无法继续支持此代码的多种修复方法

当你在运行某些应用程序或游戏时,可能会遇到"找不到msvcr110.dll无法继续执行"的错误信息,这通常表明系统中缺少某个重要文件。为了解决这个问题,让我们先探讨为什么会发生这种情况。只要了解了,我们才能用更多的方法去…

JAVA 学习 面试(六)数据类型与方法

数据类型 基本数据类型 为什么float3.4报错 3.4 默认是浮点double类型的,如果赋值给float是向下转型,会出现精度缺失,,需要强制转换 Switch支持的数据类型? byte、short、int、char 、 enum 、 String 基本类型与包…

Git的merge和rebase你真的了解吗?

1. 前言 在我们的日常开发中,Git扮演着重要的角色,负责管理代码的版本。分支管理在开发过程中具有显著的影响。通常情况下,我们有生产、预发、测试和开发这几种分支。根据项目的不同阶段,我们会将代码提交到相应的版本上。标准的…

OpenGL ES 实现图像腐蚀、膨胀、边缘检测

前文我们详细讲了图像锐化的基本原理,本文再介绍一下图像基本处理之腐蚀、膨胀和边缘检测,它们在图像处理和计算机视觉领域有着广泛的应用。 图像腐蚀(Image Erosion):用于缩小或消除图像中物体的边界。主要用于去除图像中的小细节、噪声或不规则物体。 实现图像腐蚀的片…

【Android 10】 BatteryController

学习了一下电池的相关模式,也就是它的观察者模式,先附上图 图应该挺清晰的,BatteryControllerImpl就是被观察者,BatteryControllerImpl重写了CallbackController的两个方法用于添加或移除观察者。 void addCallback(T listener);…

编码下的雪景:如何用HTML和JS让雪花在屏幕上舞动

这段时间,全国各地都加入了下雪的队伍当中,看着窗外漫天飞雪,想着我的网站上面也来一场雪吧。正琢磨着如何实现,网上突然蹦出来一段下雪的代码,这不正是我要的么?先来看看效果吧。 效果一 效果二 效果三 要…

7.Feign远程调用

2.Feign远程调用 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: •代码可读性差,编程体验不统一 •参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:https://github.com/OpenF…

Modbus通信无法正确接收应答的问题处理

问题现象: 现场反馈,modbus网关无法正确读取就地设备的温度信息。使用PC连接就地设备可以正常读取。 问题调查: 拿到末端设备后,故障现象可重复,不过使用PC的USB转485适配器也无法正常读取数据。 如下图&#xff1…

不要为了学习而学习

经常有朋友问我: 老师,从您这里学了很多方法,也一直想要改变自己,但总是没办法坚持下去,怎么办? 这个问题,我也很无奈啊。毕竟我也没办法飞到你身边,手把手把每一步都教给你。&…

万字长文详解Java线程池面试题

王有志,一个分享硬核 Java 技术的互金摸鱼侠 加入 Java 人的提桶跑路群:共同富裕的Java人 今天是《面霸的自我修养》第 6 篇文章,我们一起来看看面试中会问到哪些关于线程池的问题吧。数据来源: 大部分来自于各机构(J…

编程入门:五个你必须知道的编程常识

常识1:编程不仅仅是写代码 当我们谈论编程时,大多数人首先想到的是写代码。这是正确的,但并不完整。编程不仅仅是写代码,而是解决问题的一种方式。编程是一种工具,我们使用它来创建能够解决特定问题的产品和服务。 比…

【日常聊聊】自然语言处理的发展

🍎个人博客:个人主页 🏆个人专栏: 日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 技术进步 应用场景 挑战与前景 伦理和社会影响 实践经验 结语 我的其他博客 前言 自然语言处理(NLP&#xf…

iLO 安装中文固件包

前言 安装中文版本的安装包,需要把对应的ilo安装到固定的版本上,ilo的版本是2.70。必须是这个版本; 如果不是这个版本就需要刷到对应的ilo版本 下载对应的固件包。 到这个界面选择文件,然后点击上载。 以上就是刷系统包的步骤。 …

物流实时数仓——概述与准备工作

目录 一、架构设计与技术栈 (一)数仓架构设计 (二)所用技术栈 (三)最终效果 二、关于离线与实时的相关概念 三、实时数仓设计思路 一、架构设计与技术栈 (一)数仓架构设计 (二)所用技术栈 Hadoop 3.3.4 Zookeeper 3.7.1 Kafka 3.3.1 Hbase 2.4.11 Redis 6.0.8 Flink 1.17…

Linux操作系统概念

绪论​: “心灵纯洁的人,生活充满甜蜜和喜悦。——列夫托尔斯泰”,本章的主要内容是介绍了硬件的组成结构冯诺依曼体系结构以及操作系统的概念和操作系统的作用,本章的内容主要是理论他起到承上启下的作用只有理解了操作系统的运行…

基于SpringBoot Vue宠物领养系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…