最近,我正在研究RV32I基本指令集,但没有发现任何看起来像LD r1,imm的指令。因此,我想知道汇编编程器如何将立即数加载到RV32I系统中的寄存器中?谢谢。
为此,程序员可以使用ADDI r1,r0,imm。由于r0为常数0,因此该指令将imm移至寄存器r1。
我不知道RV32的设计者是否以这种方式使用ADDI代替LD r1,imm?
希望任何人都可以对此有所了解。谢谢。
答案 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