GCC 汇编输出-S

编译的过程就是把预处理完的一文件进行一系列的词法分析,语法分析及优化后的结果生成相应的汇编文件。gcc在默认的情奖品下,是不输出这汇编代码的文件的,如果需要,我们可以使用-S输出。

如代码:test.c

#include<stdio.h>
int main(int argc,char* argv[])
{
    int i=0;
    for(i=0;i<10;i++)
    {
        printf("%d\n",i);
    }

    return 0;
}

使用gcc进行编译

 gcc -S test.c -o test.s

将编译后的结果存放到test.s中

    .file    "test.c"
    .section    .rodata
.LC0:
    .string    "%d\n"
    .text
    .globl    main
    .type    main, @function
main:
.LFB0:
    .cfi_startproc
    pushq    %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    subq    $32, %rsp
    movl    %edi, -20(%rbp)
    movq    %rsi, -32(%rbp)
    movl    $0, -4(%rbp)
    movl    $0, -4(%rbp)
    jmp    .L2
.L3:
    movl    -4(%rbp), %eax
    movl    %eax, %esi
    movl    $.LC0, %edi
    movl    $0, %eax
    call    printf
    addl    $1, -4(%rbp)
.L2:
    cmpl    $9, -4(%rbp)
    jle    .L3
    movl    $0, %eax
    leave
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size    main, .-main
    .ident    "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-36)"
    .section    .note.GNU-stack,"",@progbits