登录
首页 >  Golang >  Go问答

寻找表格中的数值

来源:stackoverflow

时间:2024-03-20 10:54:27 411浏览 收藏

在 ARM64 架构的 Go 汇编中,开发者希望从一个值表中基于变量加载数据到寄存器中。虽然使用常数可以实现此操作,但使用变量时遇到困难。经过尝试,发现通过在变量前面添加 $ 符号,即可解决问题。该方法有效,因为它指示汇编器将变量视为地址,从而可以正确地从值表中加载数据。

问题内容

在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

到这里,我们也就讲完了《寻找表格中的数值》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>