我是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代码.c
将生成如下的程序集代码
sum:
 pushl %ebp
 movl %esp,%ebp
 movl 12(%ebp),%eax
 addl 8(%ebp),%eax
 addl %eax,accum
 movl %ebp,%esp
 popl %ebp
 ret

但是在我的机器上(OS:Ubuntu10.4x64),我得到了以下信息
    .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

为什么我看到了这种不同?

最佳答案

因为这本书已经有11年的历史了,而海合会自其问世以来已经发生了很大的变化。

10-08 11:36