[RISC-V MCU 应用开发] RISC-V汇编学习中的立即数

[复制链接]
2775|5
 楼主| LOVEEVER 发表于 2024-9-13 15:26 | 显示全部楼层 |阅读模式
立即操作数,immediate operand,是我觉得在汇编中比较难理解的概念之一了。立即数简单理解就是被编译在指令中的,能被处理器立即使用的常数。在CPU的算数逻辑计算单元 (ALU) 中,能接触到的值只能是来自寄存器的值或者是立即数,他没法儿直接去内存中获取值,内存中的数值必须先被取到寄存器中,然后才能被运算。比如下面这几句C代码:
  1. int a,b;
  2. a=5;
  3. b=b+a;



ALU要处理a和b的值,就必须先把他们的值取到寄存器中,因为a和b都是变量,他们在内存中都有自己的地址。但是下面这条命令中的5就是一个立即数,5这个常数会被编译到机器指令中,CPU在处理的时候无需去内存单独获取。
  1. int a,b;
  2. a=a+5;


1.png
如下图RISC-V的6种汇编指令类型中,除了第一种纯Register操作的R-type指令外,多达5种都涉及到了立即数的操作。但是我们也看到像I-type指令中立即数只有12个bit,只能表示[-2048, 2047)的范围,对于超出这个范围的立即数如何处理呢?
2.png
注意U-type指令类型就是为此而生的,将一个大立即数的高20位先放到寄存器rd中,然后再将rd与I-type指令中的低12位立即数相加,就得到了32位的立即数。这个过程比较复杂,RISC-V提供了一个伪指令li来表示这一系列操作。

laocuo1142 发表于 2024-9-14 15:23 | 显示全部楼层
立即数在RISC-V汇编中用于执行各种算术、逻辑运算以及数据转移等操作,可以简化程序结构,提高执行效率。
szt1993 发表于 2024-10-11 11:29 来自手机 | 显示全部楼层
操作数对于MCU底层非常关键,性能提升都在处理架构上
OKAKAKO 发表于 2024-10-16 21:20 | 显示全部楼层
RISC-V的6种汇编指令类型中,除了第一种纯Register操作的R-type指令外,多达5种都涉及到了立即数的操作
彩虹彼岸 发表于 2025-6-19 07:00 | 显示全部楼层
在 RISC-V 汇编 中,立即数(Immediate) 是一个非常重要的概念。立即数通常是指直接在指令中编码的常量,而不是存储在寄存器或内存中的值。它允许程序在执行时直接操作固定的数值,而不需要额外的内存读取操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

2689

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部