我可以编写(x86)汇编语言来构建GCC和MSVC吗?
我有一个完全用C编写的项目。同样的C文件可以使用GCC for Linux或MSVC for Windows进行编译。出于性能原因,我需要将部分代码重新编写为x86汇编语言 是否可以将此汇编语言编写为使用GCC和MSVC工具链构建的源文件?或者,如果我为一个工具链编写一个部件源文件,是否有一个工具可以将其转换为另一个工具 或者,我是否被困在维护汇编源代码的两个副本,或者使用第三方汇编程序(如?我发现两个问题:我可以编写(x86)汇编语言来构建GCC和MSVC吗?,c,gcc,visual-c++,assembly,nasm,C,Gcc,Visual C++,Assembly,Nasm,我有一个完全用C编写的项目。同样的C文件可以使用GCC for Linux或MSVC for Windows进行编译。出于性能原因,我需要将部分代码重新编写为x86汇编语言 是否可以将此汇编语言编写为使用GCC和MSVC工具链构建的源文件?或者,如果我为一个工具链编写一个部件源文件,是否有一个工具可以将其转换为另一个工具 或者,我是否被困在维护汇编源代码的两个副本,或者使用第三方汇编程序(如?我发现两个问题: masm和gas有不同的语法。gas可以配置为在.syntax Intel,nopr
- masm和gas有不同的语法。gas可以配置为在
指令中使用英特尔语法,但即使如此,仍然存在微小差异(例如,不同的指令)。一种可能的方法是使用C预处理器对程序集源代码进行预处理,对两者不同的所有指令使用宏。这还具有提供统一注释语法的优点 然而,仅仅使用像nasm这样的可移植的第三方汇编程序可能不那么麻烦.syntax Intel,noprefix
- Linux和Windows有不同的调用约定。x86-32的一个可能解决方案是坚持一个受良好支持的调用约定,如
。您可以告诉gcc在使用调用函数时使用什么调用约定。例如,这将声明stdcall
以使用foo
调用约定:stdcall
您可以在MSVC中使用extern int foo(int x, int y) __attribute__((stdcall));
执行相同的操作,从而解决此问题 在x86-64上,类似的解决方案是可能的,但我不确定必须设置哪些属性 当然,您也可以使用与第一个问题相同的cpp方法,根据您需要的调用约定生成稍微不同的函数序言和尾声。但是,这可能不太容易维护\uu declspec