golang:可用的汇编指令

时间:2014-09-23 17:54:03

标签: go

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

MOVW R3>> 8,R3

现在我想做一个乘法和累加(MLA),根据这个文档并不是所有操作码都受支持,所以也许MLA不是,但我不知道如何判断它是否存在。我在Golang回购中看到了有关ARM的MLA的提及,但我不确定该怎么做我在那里看到的。

是否记录了支持哪些说明以及如何编写说明?任何人都可以给我任何有用的指示吗?

1 个答案:

答案 0 :(得分:4)

这是我在how to write ARM assembler

上写的一篇杂乱无章的文档

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

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


Go汇编程序基于此处记录的计划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个操作数,所以
    • ADD r0,r0,r1; [ARM] r0< - r0 + r1
    • 写成
    • ADD r1,r0,r0
    • ADD r1,r0
  • 用' $'表示的常量不是'#'