微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在表中查找值?

如何解决如何在表中查找值?

在 arm64 上的 Go 汇编中,我创建了一个值表

DATA table<>+0(SB)/4,0x00000001
DATA table<>+4(SB)/4,0x00000002
DATA table<>+8(SB)/4,0x00000003
DATA table<>+12(SB)/4,0x00000004

但是我想要做的是从这个表中加载一个值到一个寄存器中,但是基于一个变量。

如果我有一个常数,我可以做到

MOVD table<>+4(SB),R1

所以 R1=0x00000002

但是我怎么能用变量来做呢?像……

MOVD $4,R0
MOVD table<>+R0(SB),R1

或者更好的是,我可以获取地址并直接加载向量吗?

我猜正常情况下的答案是 ADR,但是当我在 go 中尝试时

ADR table<>(SB),R0

我刚好

asm: illegal combination: 00280 [...] ADR table<>(SB),R9 ADDR NONE NONE REG,3 7

这可能是我见过的最没用的错误消息。

好的,所以如果我使用 PC 相对寻址,ADR 可以工作,但这显然不对。

解决方法

事实证明这真的很简单,你只需在变量前加一个 $

MOVD $table<>+0(SB),R0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。