如何将立即数加载到RV32I基本指令集中的寄存器中?

时间:2019-06-26 22:11:42

标签: riscv

最近,我正在研究RV32I基本指令集,但没有发现任何看起来像LD r1,imm的指令。因此,我想知道汇编编程器如何将立即数加载到RV32I系统中的寄存器中?谢谢。

为此,程序员可以使用ADDI r1,r0,imm。由于r0为常数0,因此该指令将imm移至寄存器r1。

我不知道RV32的设计者是否以这种方式使用ADDI代替LD r1,imm?

希望任何人都可以对此有所了解。谢谢。

1 个答案:

答案 0 :(得分:1)

有一个li(立即加载)别名或伪指令也提供了您所引用的功能。

  

以下示例显示了用于加载立即数的li伪指令:       .section .text .globl _start       _start:

.equ CONSTANT, 0xcafebabe

        li a0, CONSTANT
     

生成以下汇编输出,如objdump所示:

0000000000000000 <_start>:
   0: 00032537            lui     a0,0x32
   4: bfb50513            addi    a0,a0,-1029
   8: 00e51513            slli    a0,a0,0xe
   c: abe50513            addi    a0,a0,-1346

此代码段来自github markdown,在riscv汇编中进行编程时是一个很好的参考。 https://github.com/riscv/riscv-asm-manual/blob/master/riscv-asm.md#load-immediate