linux下 写了个小程序,想查看其生成的汇编代码,如下:
#include<stdio.h>
int main()
{
int i, n = 10,v = 0;;
for(i = 0; i < n; i++)
v += i;
}
命令: gcc xorl.c -S
ain:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $10, -8(%ebp)
movl $0, -12(%ebp)
movl $0, -4(%ebp)
jmp .L2
.L3:
movl -4(%ebp), %eax
addl %eax, -12(%ebp)
addl $1, -4(%ebp)
.L2:
movl -4(%ebp), %eax
cmpl -8(%ebp), %eax
jl .L3
leave
ret
没优化之前好多行~~
再换个:gcc -O2 xorl.c -S # -O2 优化选项?
main:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
优化的真干净...... - -! gcc认为写的都是毫无意义的代码么。。
C代码结尾处添加 printf("%d/n", v);//终端上该打印点东西吧,然后优化生成汇编代码
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $45, 8(%esp)
movl $.LC0, 4(%esp)
movl $1, (%esp)
call __printf_chk
leave
ret
优化是优化,结果是gcc真实在,先算出了数列和,再赋值~~ 还以为有循环代码。。