Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc中的英特尔风格内联程序集 我试图用C++编写一个旧的C++软件项目::使用GCC编译器的块,在修复了一些其他问题之后,我碰到了一个问题:项目中有一个文件,英特尔风格的内嵌ASM写为 _asm { code here }_C++_Gcc_Assembly_Intel - Fatal编程技术网

gcc中的英特尔风格内联程序集 我试图用C++编写一个旧的C++软件项目::使用GCC编译器的块,在修复了一些其他问题之后,我碰到了一个问题:项目中有一个文件,英特尔风格的内嵌ASM写为 _asm { code here }

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

并且编译器拒绝使用“错误:''u asm'未在此范围内声明”对其进行编译

我花了一段时间在谷歌上搜索解决方案,但我能找到的唯一方法是将
-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条指令将是一个非常好的步骤!)。