命令是:gcc -S test.c
#include<stdio.h>
void main()
{
int i,j;
j=0;
i=j+1;
printf("hello world/n");
printf("the result is %d/n",i);
}
汇编代码是
.file "test.c"
.section .rodata
.LC0:
.string "hello world"
.LC1:
.string "the result is %d/n"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $32, %esp
movl $0, 28(%esp)
movl 28(%esp), %eax
addl $1, %eax
movl %eax, 24(%esp)
movl $.LC0, (%esp)
call puts
movl $.LC1, %eax
movl 24(%esp), %edx
movl %edx, 4(%esp)
movl %eax, (%esp)
call printf
leave
ret
.size main, .-main
.ident "GCC: (GNU) 4.4.0 20090506 (Red Hat 4.4.0-4)"
.section .note.GNU-stack,"",@progbits
将i和j 的定义去掉,重新编译连接得到的是
.file "test.c"
.section .rodata
.LC0:
.string "hello world"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $.LC0, (%esp)
call puts
leave
ret
.size main, .-main
.ident "GCC: (GNU) 4.4.0 20090506 (Red Hat 4.4.0-4)"
.section .note.GNU-stack,"",@progbits