golang:有哪些可用的汇编指令

vis*_*shi 6 go

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

MOVW R3>>8,R3

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

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

Nic*_*ood 4

这是我写的关于如何编写 ARM 汇编器的一些零散的文档

我从一个经验丰富的 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
  • 用“$”而不是“#”表示的常量