1

基本上我即将进入我的最后一年,一个有趣的提议项目想法是用 C++ 为 Arm Cortex M- 创建一个交叉汇编器

网络上的所有信息都说明了如何在 C++ 中为 arm 进行交叉编译,但没有说明交叉编译器本身的源代码如何/在哪里。

我应该寻找什么细节?你有什么技巧可以避免重大旅行吗?

提前致谢!

4

3 回答 3

1

等价的交叉*汇编器*将被 GAS 编译(在主机 H 上)以在目标 X 上运行,但为目标 Y 汇编代码。

GCC 是您的汇编程序的实现语言。但是由于您的交叉汇编器可能与 GCC++ 在同一平台上运行,因此它就像任何程序一样。该程序仅生成外来汇编。

于 2013-09-27T14:51:36.483 回答
1

假设您只想用 C++ 编写一个 ARM 汇编程序,因为这cross compiling将取决于您在哪里编译该项目。这里有一些指示。

首先,您需要确定语法。最好使用现有的,因为

  1. 将使您的工作更轻松
  2. 为已经习惯的用户提供
  3. 可以使用现有工具验证您的项目。就像您可以使用标准编译器为一段代码片段生成程序集并运行您自己的汇编程序以从中生成二进制文件一样。

综上所述,我将使用GNU 的语法,只关注ARM 部分而忽略其他部分。

然后,您需要为该语法编写一个解析器。您可以使用解析器生成器,但另一方面,如果您自己动手编写可能会更容易,因为除了某些情况外,汇编语法并不复杂。

如果您可以最终确定解析器,那么您需要能够接收所有指令并将它们编码为写入二进制值。您还需要注意支持语言结构,例如能够在应用程序中的某处保存字符串或任何数据,并允许指令对该(地址)进行操作。

最后一部分,如果您想生成标准二进制文件,您需要学习并能够以这种形式生成二进制文件,以便其他系统(如加载程序、操作系统)可以成功使用您的汇编程序生成的二进制文件。

于 2013-09-30T08:05:47.400 回答
0

交叉编译器通常基于 GCC 和 binutils。我认为这两个指南可能会有所帮助:

http://sourceware.org/ml/crossgcc/2005-08/msg00114/l-cross-ltr.pdf

http://www.rockbox.org/wiki/CrossCompiler

于 2013-09-27T13:49:20.973 回答