基本上我即将进入我的最后一年,一个有趣的提议项目想法是用 C++ 为 Arm Cortex M- 创建一个交叉汇编器
网络上的所有信息都说明了如何在 C++ 中为 arm 进行交叉编译,但没有说明交叉编译器本身的源代码如何/在哪里。
我应该寻找什么细节?你有什么技巧可以避免重大旅行吗?
提前致谢!
基本上我即将进入我的最后一年,一个有趣的提议项目想法是用 C++ 为 Arm Cortex M- 创建一个交叉汇编器
网络上的所有信息都说明了如何在 C++ 中为 arm 进行交叉编译,但没有说明交叉编译器本身的源代码如何/在哪里。
我应该寻找什么细节?你有什么技巧可以避免重大旅行吗?
提前致谢!
等价的交叉*汇编器*将被 GAS 编译(在主机 H 上)以在目标 X 上运行,但为目标 Y 汇编代码。
GCC 是您的汇编程序的实现语言。但是由于您的交叉汇编器可能与 GCC++ 在同一平台上运行,因此它就像任何程序一样。该程序仅生成外来汇编。
假设您只想用 C++ 编写一个 ARM 汇编程序,因为这cross compiling
将取决于您在哪里编译该项目。这里有一些指示。
首先,您需要确定语法。最好使用现有的,因为
综上所述,我将使用GNU 的语法,只关注ARM 部分而忽略其他部分。
然后,您需要为该语法编写一个解析器。您可以使用解析器生成器,但另一方面,如果您自己动手编写可能会更容易,因为除了某些情况外,汇编语法并不复杂。
如果您可以最终确定解析器,那么您需要能够接收所有指令并将它们编码为写入二进制值。您还需要注意支持语言结构,例如能够在应用程序中的某处保存字符串或任何数据,并允许指令对该(地址)进行操作。
最后一部分,如果您想生成标准二进制文件,您需要学习并能够以这种形式生成二进制文件,以便其他系统(如加载程序、操作系统)可以成功使用您的汇编程序生成的二进制文件。
交叉编译器通常基于 GCC 和 binutils。我认为这两个指南可能会有所帮助:
http://sourceware.org/ml/crossgcc/2005-08/msg00114/l-cross-ltr.pdf