戈朗 : what assembly instructions are available

标签 go

我有一个在 ARM 上运行的程序,我正在用汇编编写它的一个函数。我在这方面取得了很好的进展,虽然我发现有时很难弄清楚如何为 go 的汇编程序编写某些指令,例如,我没想到右移会这样写:

MOVW R3>>8, R3

现在我想做一个乘法和累加 (MLA),根据这个文档,并不是所有的操作码都被支持,所以 MLA 可能不被支持,但我不知道如何判断它是否被支持。我在 golang 存储库中看到关于 ARM 的 MLA 提及,但我不太确定我在那里看到的是什么。

是否有任何地方记录支持哪些指令以及如何编写它们?任何人都可以给我任何有用的指示吗?

最佳答案

这是我在 how to write ARM assembler 上写的一些草率的文档

我是从一个有经验的 ARM 人员的角度写的,试图弄清楚 Go 汇编程序是如何工作的。

这是开头的摘录。如果您有更多问题,请随时给我发电子邮件!


Go 汇编器基于此处记录的 plan 9 汇编器。

http://plan9.bell-labs.com/sys/doc/asm.html

很好地介绍了 ARM

http://www.davespace.co.uk/arm/introduction-to-arm/index.html

操作码

http://simplemachines.it/doc/arm_inst.pdf

说明

  • 目的地在最后而不是在前
  • 参数好像完全反了
  • 可以被压缩为 2 个操作数,所以
    • 添加 r0, r0, r1 ; [ARM] r0 <- r0 + r1
    • 写成
    • 添加 r1、r0、r0
    • 添加 r1, r0
  • 用“$”而不是“#”表示的常量

关于戈朗 : what assembly instructions are available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001623/

相关文章:

go - 为什么要比较在 golang 中使用按位与?

go - golang实现全文搜索的高效方式

go - 服务器和客户端之间明显的死锁

go - 使用反射获取指针接收器的go-gin的handlerFunc

运行 go get 时 Docker 构建失败

go - 将两个 if 条件合二为一

go - 具有相同早期返回语句的函数的不同基准结果

go-pg "belongs to"2个字段到同一个表

concurrency - Go并发和 channel 困惑

windows - 适用于 Windows 7(32 位)中所有平台的 Golang 编译