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

问题描述 投票:0回答:2

我需要让我的 RISC-V 程序集即时写入指令 - (这是 Forth,以便用户可以扩展语言)。 当我使用 32 位 ISA 时,这相对简单,假设我想获取当前正在写入的地址的偏移量,我会做一些事情,例如写出操作码:

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

当我有 64 位地址时,这不再起作用,因为我必须写出实际的操作码,而不仅仅是使用像

这样的汇编技巧
li s8, address

我很困惑如何去做。正确的做法是什么?

assembly 64-bit riscv
2个回答
0
投票

我是 RISC-V AL 的新手,但对 AL 并不陌生。 40多年前,我在IBM 360上做过AL,然后是Z80芯片、6502芯片、Wang计算机、Raspberry PI等

我喜欢以下内容:

.文字

la t0,some_function_addr ld t0, 0(t0) 贾尔 t0

some_function_addr:.dword some_function

.数据

让链接器将外部到文件地址放入 some_function_addr 中。

如果这有什么缺点,我想知道。


-1
投票

本质上,我通过将数字的高 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
© www.soinside.com 2019 - 2024. All rights reserved.