正如这个问题所示,使用g++,可以执行g++ -S -masm=intel test.cpp
来获得汇编代码。
同样地,使用clang,可以执行clang++ -S test.cpp
,但是clang不支持-masm=intel
选项(warning argument unused during compilation: -masm=intel
)。那么,如何在clang中使用intel语法?
-masm=intel
参数。
clang++ -S -mllvm --x86-asm-syntax=intel test.cpp
-mllvm <arg>
从clang命令行传递llvm选项。遗憾的是,这个选项似乎没有被很好地记录下来,因此我只能通过浏览llvm邮件列表找到它。$clang -S -mllvm --x86-asm-syntax=intel file.c
。这里有什么问题吗?它没有给出任何错误并且默默退出。 - S Stest.s
的文件。您可以使用-o <path>
选项将此输出位置更改为自定义位置。 - dcolesnasm
汇编代码并进行编译和链接是否可行? - Alexander Cska从clang r208683版本(clang 3.5+)开始,它可以理解-masm=intel
指令。所以如果你使用的clang版本足够新,就可以直接使用该指令。
假设你可以让Clang生成普通的LLVM字节码,然后使用llc编译成汇编语言,再使用其 --x86-asm-syntax=intel
选项以获取Intel语法的结果。
llc
默认打开优化(-02),而gcc和clang默认不使用优化(-O0)(我花了很长时间才弄清楚为什么汇编输出不同)。 - Jesse Good
.bc
文件,然后成功地用llc
输出了英特尔汇编。您能把这个作为答案吗? - Jesse Good