assembly 想用C++写一个Arm Cortex交叉汇编程序

t9aqgxwy  于 2023-08-06  发布在  其他
关注(0)|答案(3)|浏览(102)

基本上,我即将进入我的最后一年,一个有趣的项目想法是用C为Arm Cortex M创建一个交叉汇编器。
网络上的所有信息都说明了如何在C
中为arm进行交叉编译,但没有说明交叉编译器本身的源代码是如何/在哪里的。
我应该搜索哪些具体信息?你有什么建议来避免重大失误吗?
提前感谢!

b91juud3

b91juud31#

假设你只想用C++编写一个ARM汇编程序,因为cross compiling只取决于你在哪里编译这个项目。这里有一些提示。
首先,您需要确定语法。最好使用现有的一个,因为
1.会让你的工作更轻松
1.为那些已经习惯了
1.可以使用现有工具验证项目。就像你可以使用一个标准的编译器来为一段代码片段生成汇编,然后运行你自己的汇编器来生成一个二进制文件。
综上所述,我将使用GNU的语法,只关注ARM部分,忽略其他部分。
然后需要为该语法编写一个解析器。你可以使用一个解析器生成器,但是另一方面,如果你自己编写一个解析器生成器可能会更容易,因为汇编语法并不复杂,除了某些情况。
如果您可以完成解析器,那么您需要能够接收所有指令并将它们编码为写二进制值。您还需要注意支持语言结构,例如能够将字符串或任何数据保存在应用程序中的某个位置,并允许指令对该地址(地址)进行操作。
作为最后一部分,如果你想生成标准的二进制文件,你需要学习并能够以这种形式生成二进制文件,以便其他系统,如加载器,操作系统可以成功地使用汇编程序生成的二进制文件。

ia2d9nvy

ia2d9nvy2#

交叉 * 汇编器 * 的等价物是GAS编译(在主机H上)以在目标X上运行,但为目标Y汇编代码。
GCC是你的汇编器的实现语言。但是由于你的交叉汇编器可能会运行在与GCC++相同的平台上,它就像任何程序一样。该程序仅生成外来asm。

ogq8wdun

ogq8wdun3#

交叉编译器通常基于GCC和binutils。我认为这两个指南可能会有所帮助:
http://sourceware.org/ml/crossgcc/2005-08/msg00114/l-cross-ltr.pdf
http://www.rockbox.org/wiki/CrossCompiler

相关问题