打印
[RISC-V MCU 应用开发]

RISC-V汇编学习中的立即数

[复制链接]
123|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
立即操作数,immediate operand,是我觉得在汇编中比较难理解的概念之一了。立即数简单理解就是被编译在指令中的,能被处理器立即使用的常数。在CPU的算数逻辑计算单元 (ALU) 中,能接触到的值只能是来自寄存器的值或者是立即数,他没法儿直接去内存中获取值,内存中的数值必须先被取到寄存器中,然后才能被运算。比如下面这几句C代码:
int a,b;
a=5;
b=b+a;



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



如下图RISC-V的6种汇编指令类型中,除了第一种纯Register操作的R-type指令外,多达5种都涉及到了立即数的操作。但是我们也看到像I-type指令中立即数只有12个bit,只能表示[-2048, 2047)的范围,对于超出这个范围的立即数如何处理呢?

注意U-type指令类型就是为此而生的,将一个大立即数的高20位先放到寄存器rd中,然后再将rd与I-type指令中的低12位立即数相加,就得到了32位的立即数。这个过程比较复杂,RISC-V提供了一个伪指令li来表示这一系列操作。

使用特权

评论回复

相关帖子

沙发
laocuo1142| | 2024-9-14 15:23 | 只看该作者
立即数在RISC-V汇编中用于执行各种算术、逻辑运算以及数据转移等操作,可以简化程序结构,提高执行效率。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

272

主题

1841

帖子

4

粉丝