同样的C代码为什么在64位的机器上汇编出来的汇编程序的行数比在32位机器上汇编出来的程序的行数要多?要运行的指令多了速度还能更快?多出来的代码是在干什么?
tmp3.c:
#include
int add(int a,int b);
int
main()
{
int ret = add(2,3);
return 0;
}
int
add(int a,int b)
{
int i = 4;
return a+b+i;
}
32位机器上汇编出来的程序源码:
tmp3_32.s(共33行):
.file
"tmp3.c"
.text
.globl main
.type
main, @function
main:
pushl
%ebp
movl
%esp, %ebp
andl
$-16, %esp
subl
$32, %esp
movl
$3, 4(%esp)
movl
$2, (%esp)
call
add
movl
%eax, 28(%esp)
movl
$0, %eax
leave
ret
.size
main, .-main
.globl add
.type
add, @function
add:
pushl
%ebp
movl
%esp, %ebp
subl
$16, %esp
movl
$4, -4(%ebp)
movl
12(%ebp), %eax
movl
8(%ebp), %edx
leal
(%edx,%eax), %eax
addl
-4(%ebp), %eax
leave
ret
.size
add, .-add
.ident
"GCC: 4.4.3"
.section
.note.GNU-stack,"",@progbits
64位机器上汇编出来的程序源码:
tmp3_64.s(共47行):
.file
"tmp3.c"
.text
.globl main
.type
main, @function
main:
.LFB0:
.cfi_startproc
pushq
%rbp
.cfi_def_cfa_offset 16
movq
%rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
subq
$16, %rsp
movl
$3, %esi
movl
$2, %edi
call
add
movl
%eax, -4(%rbp)
movl
$0, %eax
leave
ret
.cfi_endproc
.LFE0:
晕死,又超过字数限制了,不能全部贴上来。。。
|