GCC -S 参数

获取更多嵌入式、Linux学习资料,获取独家嵌入式Linux学习路线地图,欢迎加群:398294860,观看更专业、更系统地嵌入式视频教程,请关注:wanglitao.taobao.com

如果只对C源程序做编译处理,不汇编,可以使用gcc -S 参数:会gcc会将C源程序做预处理、编译操作,生成对应的汇编文件,不再做进一步的汇编和链接操作。

# gcc -S hello.c
# ls
hello.c hello.s

当然,我们也可以将上一节经过预处理后的hello.i文件编译为hello.s汇编文件:

# gcc -S hello.i

两者生成的hello.s内容是一样的:

# cat hello.s
    .file    "hello.c"
    .text
    .section    .rodata
.LC0:
    .string    "hello zhaixue.cc!"
.LC2:
    .string    "PI = %f\n"
.LC3:
    .string    "release mode"
    .text
    .globl    main
    .type    main, @function
main:
.LFB0:
    .cfi_startproc
    endbr64
    pushq    %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    leaq    .LC0(%rip), %rdi
    call    puts@PLT
    movq    .LC1(%rip), %rax
    movq    %rax, %xmm0
    leaq    .LC2(%rip), %rdi
    movl    $1, %eax
    call    printf@PLT
    leaq    .LC3(%rip), %rdi
    call    puts@PLT
    movl    $0, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size    main, .-main
    .section    .rodata
    .align 8
.LC1:
    .long    1374389535
    .long    1074339512
    .ident    "GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0"
    .section    .note.GNU-stack,"",@progbits
    .section    .note.gnu.property,"a"
    .align 8
    .long     1f - 0f
    .long     4f - 1f
    .long     5
0:
    .string     "GNU"
1:
    .align 8
    .long     0xc0000002
    .long     3f - 2f
2:
    .long     0x3
3:
    .align 8
4:
《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客