我需要让我的RISC-V汇编在运行时编写指令-(这是Forth,这样用户就可以扩展该语言)。当我使用32位ISA时,这是相对简单的,比如说我想从我当前正在写入的地址获得一个偏移量,我会做一些事情,比如写出操作码:
lui s8, [upper 20 bits of address]
addi s8, s8, [offset]当我有64位地址时,这不再起作用,因为我必须写出实际的操作码,而不仅仅是使用汇编技巧,如
li s8, address我对如何做这件事感到困惑。正确的方法是什么?
发布于 2021-07-09 06:44:35
基本上,我通过将数字的高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,t0https://stackoverflow.com/questions/68143739
复制相似问题