将我的Linux编译器移植到Windows

时间:2014-08-12 17:02:57

标签: windows visual-studio assembly compiler-construction x86-64

我正在设计一种编程语言并且已经完成了一个编译器,它可以生成适用于Linux的x86汇编代码。

具体来说,我的编译器将“myprogram.stanza”文本文件作为输入,并生成一个“myprogram.s”文本文件,其中包含要由GCC工具链组装和链接的x86指令。

我现在也想支持Windows。这样做最直接的方法是什么?具体做法是:

1)Visual Studio是Windows的“标准”工具链吗?

2)我希望能够生成一个程序集文件,并使其与大型C / C ++项目的其余部分一起自然编译。我应该以什么汇编程序为目标?

非常感谢你的帮助。

-Patrick

1 个答案:

答案 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和英特尔语法)