咨询RISC-V汇编立即数表示格式规范及伪指令相关文档
RISC-V LUI指令两种写法解析
lui t0,%hi(string1)是否为伪指令
不是伪指令,%hi()是汇编器提供的立即数修饰符,本质是让汇编器在编译阶段计算符号string1地址的高20位,再把该数值作为LUI指令的立即数参数。LUI本身是硬件原生支持的真实指令,这种写法只是借助汇编器的符号地址计算能力,不属于需要被替换为真实指令序列的伪指令(比如li这类才是伪指令)。
两种写法的原理
lui t0, 0:直接将立即数0的高20位加载到t0的高20位,寄存器低12位被清零,最终t0的值为0。这是LUI指令最基础的直接指定立即数用法,完全符合LUI的硬件定义——将20位立即数放入目标寄存器的高20位,低12位固定为0。lui t0,%hi(string1):%hi()是RISC-V汇编的标准语法,作用是提取符号(如字符串、全局变量)内存地址的高20位。汇编器会先算出string1的完整32位内存地址,截取高20位作为LUI的立即数加载到t0的高20位。通常这种写法会搭配addi t0, t0, %lo(string1)使用,组合完成完整32位地址的寄存器加载,这是RISC-V中访问全局符号地址的标准方式。
相关文档说明
RISC-V官方的《RISC-V Assembly Programmer's Manual》(汇编程序员手册)明确规定了%hi()、%lo()这类立即数修饰符的用法,同时也定义了LUI指令的硬件行为。另外,GAS、LLVM MC等主流RISC-V汇编器的官方文档,也会详细说明这些修饰符的具体实现逻辑,以及如何与LUI、ADDI等指令配合使用。
内容的提问来源于stack exchange,提问作者UnicornsOnLSD
相关产品推荐
相关产品推荐

