gcc汇编代码输出与预期不同

时间:2014-05-10 21:38:42

标签: c gcc

我是c和gcc的新手。我试图跟随计算机系统中的一个例子:程序员的观点。作者说将以下代码放入文件(code.c)

int accum = 0;
int sum(int x, int y)
{
    int t = x + y;
    accum += t;
    return t;
}

并使用gcc如下输出汇编代码文件

gcc -O2 -S code.c

将生成汇编代码如下

sum:
 pushl %ebp
 movl %esp,%ebp
 movl 12(%ebp),%eax
 addl 8(%ebp),%eax
 addl %eax,accum
 movl %ebp,%esp
 popl %ebp
 ret

但是在我的机器上(操作系统:Ubuntu 10.4 x64),我得到以下内容

    .file   "code.c"
    .intel_syntax noprefix
    .text
    .p2align 4,,15
    .globl  sum
    .type   sum, @function
sum:
.LFB0:
    .cfi_startproc
    lea eax, [rdi+rsi]
    add DWORD PTR accum[rip], eax
    ret
    .cfi_endproc
.LFE0:
    .size   sum, .-sum
    .globl  accum
    .bss
    .align 4
    .type   accum, @object
    .size   accum, 4
accum:
    .zero   4
    .ident  "GCC: (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3"
    .section    .note.GNU-stack,"",@progbits

为什么我会看到这种差异?

1 个答案:

答案 0 :(得分:2)

因为这本书已有11年历史,而且自写完以来gcc已经发生了很大变化。