从icc获取英特尔语法asm输出,而不是默认的AT&;T语法?

从icc获取英特尔语法asm输出,而不是默认的AT&;T语法?,c,assembly,syntax,icc,intel-syntax,C,Assembly,Syntax,Icc,Intel Syntax,我被一个问题困住了。我已经使用gcc编译/汇编我的C代码一段时间了,并且已经习惯于阅读英特尔汇编语法。我在生成程序集文件时使用了-masm=intel标志 但最近,由于公司迁移,他们获得了英特尔的icc,声称它更好。所以现在我需要使用icc,但奇怪的是它有默认的汇编语法,如AT&T。我试图更改它,但它不起作用,所以我联系了英特尔支持部门,他们也不知道,每个人都给了我一个矛盾的答案 是否有一种集成gcc和icc的方法,以便我使用icc的编译“优势”,同时使用gcc编译英特尔的语法 我正在使用ubu

我被一个问题困住了。我已经使用gcc编译/汇编我的C代码一段时间了,并且已经习惯于阅读英特尔汇编语法。我在生成程序集文件时使用了
-masm=intel
标志

但最近,由于公司迁移,他们获得了英特尔的icc,声称它更好。所以现在我需要使用icc,但奇怪的是它有默认的汇编语法,如AT&T。我试图更改它,但它不起作用,所以我联系了英特尔支持部门,他们也不知道,每个人都给了我一个矛盾的答案

是否有一种集成gcc和icc的方法,以便我使用icc的编译“优势”,同时使用gcc编译英特尔的语法

我正在使用ubuntu,并获得了icc 12.x版

这个标志

   -use_msasm     Support  Microsoft  style  assembly  language  insertion
                  using MASM style syntax and, if requested, output assem-
                  bly in MASM format

看来,
-masm=intel
就像Clang和GCC一样,至少在(13.0.1)的当前最新版本中是如此。我尝试加载数组上的和示例,它生成以下程序集

testFunction(int*, int):
        xor       eax, eax                                      #2.11
        test      esi, esi                                      #3.23
        jle       ..B1.18       # Prob 50%                      #3.23
        movsxd    rdx, esi                                      #3.3
...
然而,像Steve-o的答案中那样指定
-使用msasm
根本不起作用

他们说这是
-使用msasm
,而不是
-使用{msasm
,但这也不起作用

  • 支持使用MASM样式语法插入Microsoft*样式的汇编语言,并在需要时以MASM格式输出程序集

  • 注意:GNU内联汇编程序(asm)代码和Microsoft内联汇编程序(msasm)代码不能在同一翻译单元中一起使用

然而,这是2006年ICC9.x的版本,时间太久了,这个选项可能在9.x和13.x之间有所改变

我进一步挖掘并意识到,至少因为该选项仅用于源代码中的汇编块,而不用于输出英特尔语法

允许在C++或C++文件中使用汇编代码的块和整个函数。

描述

此选项允许使用C或C++文件中的汇编代码块和整个函数。 它允许Microsoft*MASM样式的内联汇编块而不是GNU*样式的内联汇编块

备选方案
-fasm块

正如您所看到的,它只是
-fasm块的别名。此外,尽管我不知道
的命运,但请使用msasm

参考资料


将内联asm移出到单独的程序集源文件中并使用合适的汇编程序构建这些源文件有多困难?此外,您确实意识到没有什么可以阻止您将gcc编译的源文件与其他icc编译的源文件链接起来?@Paul:我不知道您是否理解这个问题。我不想组装…我只想读取组装文件,我不使用内联组装!我想用“-S”来查看汇编代码OK-这和你之前关于这个主题的问题是一样的吗?(看起来你删除了原来的问题?)。链接已失效,
-usemsasm
标志不起作用either@LưuVĩnhPhúc链接恢复,它只是icc的手册页。您可能必须清除版本的发行说明才能跟踪更改。