我通过运行以下命令生成了下面的汇编程序
clang -s hello.c
其中hello.c
是以下内容的文件名:
#include <stdio.h>
main() {
printf("Hellon");
}
汇编程序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可以使用Intel语法,就像GCC一样,但指令不会改变。clang --x86-asm-syntax=intel
,或者可能-masm=intel
与GCC兼容。
clang或LLVM手册中也可能有一些内容。 (但不要将其与LLVM-IR汇编语言混淆:LLVM内部表示的asm语法。 通过快速搜索,我没有找到任何关于clang
如何处理 GAS 指令的 LLVM 文档。
.globl _main
不是标签本身。 请注意,它在对齐填充之前。 它只是符号的属性修饰符_main
.
_main:
是输出文件中应用标签的位置。
要了解说明,请参阅如何从 GCC/clang 程序集输出中删除"噪音"?了解如何去除不相关的指令。
我认为它被称为GNU汇编程序,我在这里找到了它的文档:https://www.sourceware.org/binutils/docs-2.12/as.info/index.html。