偶然看了一篇对比while(1)和for(;;)的文章,发现gcc还可以生成汇编程序,决定也学习一下。
首先写了一个再简单不过的c程序test.c
main(){}
自己能想到的最简单的程序了,编译用gcc -S test.c,生成了汇编文件test.s,大小635字节
.arch armv6 .eabi_attribute 27, 3 .eabi_attribute 28, 1 .fpu vfp .eabi_attribute 20, 1 .eabi_attribute 21, 1 .eabi_attribute 23, 3 .eabi_attribute 24, 1 .eabi_attribute 25, 1 .eabi_attribute 26, 2 .eabi_attribute 30, 6 .eabi_attribute 18, 4 .file "test.c" .text .align 2 .global main .type main, %function main: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 @ link register save eliminated. str fp, [sp, #-4]! add fp, sp, #0 mov r0, r3 add sp, fp, #0 ldmfd sp!, {fp} bx lr .size main, .-main .ident "GCC: (Debian 4.6.3-14+rpi1) 4.6.3" .section .note.GNU-stack,"",%progbits
看不懂,继续gcc -c test.s生成目标文件test.o,824字节,更看不懂,再继续gcc -o test test.o生成运行文件test,4964字节,可以运行./test,当然啥结果都没有和直接gcc test.c生成的a.out应该是一样的。