我是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
为什么我会看到这种差异?
答案 0 :(得分:2)
因为这本书已有11年历史,而且自写完以来gcc已经发生了很大变化。