gcc中的英特尔风格内联程序集 我试图用C++编写一个旧的C++软件项目::使用GCC编译器的块,在修复了一些其他问题之后,我碰到了一个问题:项目中有一个文件,英特尔风格的内嵌ASM写为 _asm { code here }
并且编译器拒绝使用“错误:''u asm'未在此范围内声明”对其进行编译 我花了一段时间在谷歌上搜索解决方案,但我能找到的唯一方法是将gcc中的英特尔风格内联程序集 我试图用C++编写一个旧的C++软件项目::使用GCC编译器的块,在修复了一些其他问题之后,我碰到了一个问题:项目中有一个文件,英特尔风格的内嵌ASM写为 _asm { code here },c++,gcc,assembly,intel,C++,Gcc,Assembly,Intel,并且编译器拒绝使用“错误:''u asm'未在此范围内声明”对其进行编译 我花了一段时间在谷歌上搜索解决方案,但我能找到的唯一方法是将-masm=intel添加到构建选项中(我已经尝试过,但无法使用),或者将代码转换为asm(“此处代码”)(这是不可行的,因为ASM的数量太多)。有人知道我如何让gcc按原样编译这段代码吗?或者我应该放弃并使用其他编译器吗?gcc使用for内联汇编程序,因此您将无法通过简单的更改来处理它。我看到以下选项: 用GCC语法或C代码重写所有内容 制作一些脚本以转换为GC
-masm=intel
添加到构建选项中(我已经尝试过,但无法使用),或者将代码转换为asm(“此处代码”)代码>(这是不可行的,因为ASM的数量太多)。有人知道我如何让gcc按原样编译这段代码吗?或者我应该放弃并使用其他编译器吗?gcc使用for内联汇编程序,因此您将无法通过简单的更改来处理它。我看到以下选项:
用GCC语法或C代码重写所有内容
制作一些脚本以转换为GCC语法(非常重要的任务)
使用为其编写的任何编译器(MSVC?)编译代码
您根本无法让gcc“按原样”编译代码。如果需要使用GCC编译此东西,则必须重写代码,在C++或GCC兼容ASM中。如果真的有很多汇编代码——比如说,200条或更多指令——那么学习gcc汇编程序语法可能是值得的;如果不是,在C++中编写代码。< /P>如何生成宏,然后使用脚本替换宏的ASM行。然后你会得到更好的编译器独立性。宏是一个不错的主意,尽管我以前从未使用过宏,所以我也必须弄清楚这一点(不管我的问题听起来如何,实际上我对这个东西几乎一无所知=/)。此外,asm例程是通过标签或其他东西链接在一起的(\u asm{\n code here\n}L01:\u asm…
),我不确定如何处理。代码不会按原样编译,您需要将其更改为使用gcc编译(或改用MSVC)最近,Clang增加了对MS风格内联汇编的支持。选项2非常乐观。算了吧!选项1不是一个选项;该文件完全由asm组成,重量为83KB,包含数百个函数。看起来我只需要切换编译器。实际上有人做了选项2,它叫intel2gas
,我在类似的移植工作中也使用过它。请看我对Igor答案的评论;在这种情况下,重写不是一个选项,因为有数千条指令(200条指令将是一个非常好的步骤!)。