从icc获取Intel-syntax asm输出,而不是默认的AT& T语法?

时间:2011-03-20 10:18:09

标签: c assembly syntax icc intel-syntax

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

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

有没有办法集成gcc和icc,以便我使用icc编译“优势”,同时使用gcc编译intel的语法?

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

2 个答案:

答案 0 :(得分:3)

这个标志?

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

https://web.archive.org/web/20120728043315/http://amath.colorado.edu/computing/software/man/icc.html

答案 1 :(得分:1)

似乎-masm=intel works in ICC就像Clang和GCC一样,至少在Compiler Explorer(13.0.1)的当前最新版本中。我尝试加载 sum over array 示例,然后生成以下程序集

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的回答中指定-use_msasm并不能解决问题

official man page from Intel表示它是-use-msasm而不是-use_msasm,但这不起作用

  

-use-msasm (i32, i32em only)

     
      
  • 使用MASM样式语法支持Microsoft *样式汇编语言插入,如果需要,还支持MASM格式的输出汇编。

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

  •   

然而,2006年的ICC 9.x就是很久以前的事了,该选项可能在9.x和13.x之间的某个地方被改变

我进一步挖掘并意识到至少从ICC 16.0开始,该选项仅适用于源代码中的汇编块而不是用于输出Intel语法

  

use-msasm

     

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

     

描述

     

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

     

它允许Microsoft * MASM样式的内联汇编块而不是GNU *样式的内联汇编块。

     

替代选项

     

-fasm-blocks

正如您所看到的,它只是-fasm-blocks的别名。此外-use-asm option was deprecated虽然我不知道-use-msasm

的命运

参考