有关GCC 7.5从C代码生成的汇编代码的问题

时间:2020-06-07 08:30:41

标签: assembly gcc x86-64

我有一个简单的C代码,可以通过GCC 7.5生成汇编代码:

void swap(int* a, int* b)
{
    int c;
    c = *a;
    *a = *b;
    *b = c;
}
int main()
{
    int a = 16, b = 32;
    swap(&a, &b);
    return 0;
}

我使用以下命令获取汇编代码:gcc -Wall -S -o main.s main.c,在main.s中,我找到以下行:

main:
.LFB1:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    subq    $16, %rsp            #line 9
    movq    %fs:40, %rax         #line 10
    movq    %rax, -8(%rbp)       #line 11
    xorl    %eax, %eax           #line 12
    ......

我有两个问题:

  1. 为什么subq的第一个操作数在第9行是16?我只宣告2 整数变量,我认为应该是8
  2. 代码行是什么 10点到12点干什么?它似乎与我的C没有任何关系 程序

0 个答案:

没有答案