将64位地址加载到寄存器中



我需要让我的RISC-V程序集动态编写指令-(这是Forth,这样用户就可以扩展语言(。当我使用32位ISA时,这相对简单,比如说我想从我目前正在写的地址获得偏移量,我会做一些事情,比如写下的操作码

lui s8, [upper 20 bits of address]
addi s8, s8, [offset]

当我有64位地址时,这就不再有效了,因为我必须写出实际的操作码,而不仅仅是使用之类的组装技巧

li s8, address

我不知道该怎么做。正确的方法是什么?

本质上,我通过将数字的高32位加载到底部32位,然后左移32位并加载底部32位来解决这个问题。

这是一个典型的输出组件:

0x0000003ff7dbd040:  li  s8,63                     #0x3f
0x0000003ff7dbd044:  slli    s8,s8,0x20            #shift left 32 bits
0x0000003ff7dbd048:  lui t0,0xf7dbd                #upper half load
0x0000003ff7dbd04c:  ori t0,t0,0                   
0x0000003ff7dbd050:  slli    t0,t0,0x20
0x0000003ff7dbd054:  srli    t0,t0,0x20
0x0000003ff7dbd058:  or  s8,s8,t0

最新更新