我遇到了问题。我一直在使用gcc来编译/汇编我的C代码一段时间,并习惯于阅读英特尔汇编语法。生成程序集文件时,我使用了-masm=intel
标志。
然而,最近,由于公司迁移,他们获得了英特尔的icc,声称它更好。所以现在我需要使用icc,但奇怪的是它的默认汇编语法为AT& T.我试图改变它,但它没有用,所以我联系了英特尔的支持,他们也不知道,每个人都给了我一个矛盾的答案。
有没有办法集成gcc和icc,以便我使用icc编译“优势”,同时使用gcc编译intel的语法?
我正在使用ubuntu并获得了icc版本12.x
答案 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
,但这不起作用
使用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
参考