我正在设计一种编程语言并且已经完成了一个编译器,它可以生成适用于Linux的x86汇编代码。
具体来说,我的编译器将“myprogram.stanza”文本文件作为输入,并生成一个“myprogram.s”文本文件,其中包含要由GCC工具链组装和链接的x86指令。
我现在也想支持Windows。这样做最直接的方法是什么?具体做法是:
1)Visual Studio是Windows的“标准”工具链吗?
2)我希望能够生成一个程序集文件,并使其与大型C / C ++项目的其余部分一起自然编译。我应该以什么汇编程序为目标?
非常感谢你的帮助。
-Patrick
答案 0 :(得分:1)
两个主要的assembly syntax是:
- Intel Syntax
:[操作码] [目的地],[原产地](例如:mov eax,10)
- AT&T Syntax
:[操作码] [原点],[目的地](例如:movl $ 10,%eax)
因为您定位GCC的位置很可能是在AT&T syntax
生成程序集。
Windows中常见工具链的大多数汇编程序使用Intel Syntax
,Visual Studio汇编程序也使用Intel Syntax
,MASM和NASM。
问题1)是的Visual Studio是Windows中的事实工具链(这并不意味着它是唯一的或更好的或任何东西,但它是在Windows中工作时最常用的工具链)。 GCC在Windows中工作,英特尔编译器与VS很好地集成,Embarcadero在Windows中引领了clang base编译器的方式。当您在多平台项目中工作时,常用的编译器组合是GCC - VC++
(到目前为止)和Intel,GCC - Intel,GCC
。
问题2)如果您想在Windows中使用通用工具链进行汇编,则需要生成Intel Syntax
,如果AT&T Syntax
已经正常工作,那么就足够了。如果你想推进项目,我在这里的建议是使用例如LLVM或其他库,将你的语言源代码翻译成中间表示(例如:LLVM IR)并从那里翻译成汇编程序(注意:LLVM处理AT& T和英特尔语法)