我通过运行下面的汇编器
clang -s hello.c
其中
hello.c
是以下文件名:#include <stdio.h>
main() {
printf("Hello\n");
}
汇编器在
hello.s
中: .section __TEXT,__text,regular,pure_instructions
.build_version macos, 10, 14 sdk_version 10, 14
.globl _main ## -- Begin function main
.p2align 4, 0x90
_main: ## @main
.cfi_startproc
## %bb.0:
pushq %rbp
...
最佳答案
您可以在GAS手册中找到文档(clang / LLVM使用相同的语法,包括指令)。 https://sourceware.org/binutils/docs/as/
另请参阅https://stackoverflow.com/tags/x86/info和https://stackoverflow.com/tags/att/info中的链接,以获取有关x86-64 AT&T语法的更多信息。
Clang / LLVM可以像GCC一样使用Intel语法,但是指令不会改变。 clang --x86-asm-syntax=intel
,或者可能是-masm=intel
以与GCC兼容。
在clang或LLVM手册中也可能有某些内容。 (但不要将此与LLVM-IR assembly language混淆:LLVM内部表示形式的asm语法。)通过快速搜索,我没有找到关于clang
如何处理GAS指令的LLVM文档。.globl _main
不是标签本身。注意,它在对齐填充之前。它只是符号_main
的属性修饰符。_main:
是输出文件中标签所应用到的位置。
要了解说明,请参见How to remove "noise" from GCC/clang assembly output?有关如何删除不相关的指令的信息。