是否有方法在Go Assembly中命名常数值?我想命名一些常数,以使我的代码更具可读性.

我正在寻找类似于#define C或.equ Arm64组装的东西.以下是我用这些语言所做的事情的一个例子:

C
#define myConstant 2024

Arm64
.equ myConstant, 2024

我曾try 在Go Assembly中使用#define,但我只能让它适用于整个指令.这是一个例子:

#define MyInstruction     MOVD R1, R2
#define OtherInstruction  WORD $0xaabbccee

当我try 只制作并使用带有一个常数的#define时,会发生这样的情况:

Code

#define myConstant        WORD $2024
MOVD    R1, myConstant(R0)

Compiler Error

myFile:49: expected '(', found $
asm: assembly of myFile.s failed

推荐答案

Go汇编器在您的代码上运行C预处理器的变体. 即,您用#define定义的内容将在您的代码中被搜索和替换. 所以如果你写

#define myConstant        WORD $2024

...

MOVL myConstant, EAX

结果将是类似的

MOVL WORD $2024, EAX

这显然是荒谬的.

要解决此问题,请将宏更改为仅读取

#define myConstant 2024

并将其当作一个符号来使用

MOVL $myConstant, EAX

Go相关问答推荐

Go-Colly:将数据切片为POST请求

Golang Viper:如果第一个字段不存在,如何从另一个字段获取值

GoLang:无法发送带有附件的邮箱

如何使用工作区方法扩展克隆的Golang库

迭代字符串并用映射值替换原始字符串中的值的惯用方法

如何模拟 stripe 需要 webhooks 的捕获事件?

同一文件上的多个 Arrow CSV 阅读器返回 null

将文本文件放入切片然后进行比较

如何使用 Docker 引擎 SDK 和 Golang 运行 docker 挂载卷

通过环境变量配置 OTLP 导出器

Golang Gin 绑定请求正文 XML 到 Slice

使用innerxml在 Go 中编码 XML 是否仅适用于某些类型?

在删除级联时无法在 Gorm 中按预期工作

如何在Go中替换符号并使下一个字母大写

自定义指标未显示在 prometheus web ui 中,grafana 中也是如此

go 堆栈跟踪:在某些函数调用参数或返回值之后的问题(?)标记是什么意思?

Go Flag 用法 描述 包含 Word 值

泛型:对具有返回自身的函数的类型的约束

如何发送带有登录数据的 GET 请求并将 cookie 数据保存到 txt 文件?

Go 语言的select语句