我是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年的历史了,而海合会自其问世以来已经发生了很大的变化。