Go 如何在表中查找值?
在arm64上的Go assembly中,我创建了一个值表Go 如何在表中查找值?,go,assembly,arm,arm64,Go,Assembly,Arm,Arm64,在arm64上的Go assembly中,我创建了一个值表 DATA table<>+0(SB)/4, 0x00000001 DATA table<>+4(SB)/4, 0x00000002 DATA table<>+8(SB)/4, 0x00000003 DATA table<>+12(SB)/4, 0x00000004 数据表+0(SB)/42000000001 数据表+4(SB)/42000000002 数据表+8(SB)/42000000
DATA table<>+0(SB)/4, 0x00000001
DATA table<>+4(SB)/4, 0x00000002
DATA table<>+8(SB)/4, 0x00000003
DATA table<>+12(SB)/4, 0x00000004
数据表+0(SB)/42000000001
数据表+4(SB)/42000000002
数据表+8(SB)/42000000003
数据表+12(SB)/42000000004
但是我想做的是从这个表中加载一个值到一个寄存器中,但是基于一个变量
如果我有一个常数,我可以
MOVD table<>+4(SB), R1
MOVD表+4(SB),R1
所以R1=0x00000002
但是如何使用变量来实现呢?类似于
MOVD $4, R0
MOVD table<>+R0(SB), R1
MOVD$4,R0
MOVD表+R0(SB),R1
或者更好的是,我可以直接获取地址并加载向量吗
我想正常情况下的答案是ADR,但当我在围棋中尝试时
ADR table<>(SB), R0
ADR表(SB),R0
我只是
asm: illegal combination: 00280 [...] ADR table<>(SB), R9 ADDR NONE NONE REG, 3 7
asm:非法组合:00280[…]ADR表(SB),R9地址无无注册,3 7
这可能是我见过的最不有用的错误消息
好的,如果我使用PC相对寻址,ADR是有效的,但这显然是不对的。事实证明这很简单,只需在变量前加一个$
MOVD $table<>+0(SB), R0
MOVD$table+0(SB),R0