学习ARM汇编

23

今年会有几款价格在600欧元以下的多点触控便携式电脑上市,它们将搭载Tegra2芯片。这给我提供了一个学习ARM汇编语言的好借口。但是除了arm.com之外,我不知道从何处入手。

首先,我可以选择使用带有Linux发行版的仿真器。但是哪种仿真器和发行版最适合呢?如果可以访问主机系统的文件,那么我就可以直接从我的主目录编译和执行ARM二进制文件。

我不想浪费太多钱买书,所以我需要一些汇编源代码示例和介绍指令集的免费资料。对于在x86平台上编译ARM程序的gcc编译器标志也很有用,但我也可以自行发现。


http://simplemachines.it/simulators.html - Nikolai Fetissov
https://dev59.com/_W025IYBdhLWcg3wEhZb#54461673 - whoopdedoo
5个回答

12

获取一个评估版本的ARM软件工具包之一,其中将包括一个调试器/软件仿真器。如果你愿意花费几百美元的话,可以购买一个ARM评估板(Keil销售几款)。通过JTAG接口在评估板上测试你的代码,并查看在实际硬件上发生的情况。

这些步骤将指引您朝着正确的方向前进。

声明:我为ARM工作。


7
ARM参考文档提供了一个非常好的指令集介绍,这是一个很好的起点。
由于你正在编写汇编代码(因此可能对低级性能细节感兴趣),你需要一个周期精确的模拟器或实际硬件(或两者兼备)。除了David Lively建议的硬件选项外,您还可以考虑Beagle Board
至于编译器,有ARM的RealView工具和GCC。 ARM工具对于新硬件特性的支持可能更加完整。

2
+1 给贝瓦尔开发板。我在办公室看过它们的演示,它们的表现很棒。 - 3Dave

6
我发现从零开始学习ARM汇编语言最好的资源是这个教程:“http://www.coranac.com/tonc/text/asm.htm”。虽然有点过时,但它解释了ARM汇编的基础知识,然后你就可以阅读官方的ARM参考手册,了解你所针对设备的具体情况。例如,如果你的目标是智能手机,那么现在非常流行的指令集是ARM v7,你可以针对它学习Thumb-2和更新的技术。或者,如果你的目标是只需花费几美元的嵌入式微控制器芯片,那么可用的功能略有不同,等等。

3
从模拟器、Linux发行版和市面上的一些板子入手,可以支持一些板子。到sparkfun.com网站上,有许多低于50美元的ARM板用于学习ARM汇编语言,但不一定是Linux系统。你需要先学习ARM7或ARM,然后再学习Thumb。Embest板子(假设它没有太便宜的制造)比Beagleboard更好,因为要使Beagleboard有用,您将需要花费另外150美元购买电缆和USB设备。从下订单到在美国收到Embest板子需要一两周的时间。对于这笔钱,我更喜欢OpenRD板子或带有Marvell Sheeva的插件计算机。或者,对于较旧的系统,请选择embeddedarm.com。如果您正在寻找汇编器,则不需要具备Linux功能的系统,因此可以选择来自SparkFun的某些东西,例如基于ARM7的SAM7或LPC系列,其中一个已经具有串行端口,但您需要提供电源。从Amontec获取JTAG-Tiny或三个,这是一个很棒的工具。
Game Boy Advance也是学习编程ARM以及Thumb的好地方,VisualBoy Advance是一个好的模拟器。我可以向您展示如何制作串行电缆并找到硬件来完成其他操作。还有一个Linux系统。NDS(Nintendo DS)也是一个不错的系统,但我建议先从GBA开始。避免NDSi。
免责声明:我与ARM没有任何关联,但至少拥有上述所有设备中的一个,以及一些Stellaris板(在学习ARM和Thumb之后最后再学习Cortex-M3)。

1

通过可运行的例子学习

我正在开发:https://github.com/cirosantilli/arm-assembly-cheat

特点:

  • 可以在 Linux 主机上使用 QEMU 用户模式运行,无需 ARM 开发板,也可以在像 Raspberry Pi 这样的开发板上本地运行
  • 涵盖 ARMv7 和 ARMv8 两个版本
  • 具有良好的 GDB 设置,支持主机和本地调试
  • 断言会显示汇编代码中失败的行号
  • 使用 C 标准库进行 IO 操作,理论上可移植到其他操作系统,并且可以轻松重用像 printfmemcpy 等工具函数

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接