首页 > 关于gcc生成的汇编代码的一些疑问 ...

关于gcc生成的汇编代码的一些疑问 ...

最近也算看玩了CSAPP的第三章讲汇编语言的部分, 但是自己实际分析代码的时候碰到了许多问题. 如下图所示, 图的左上和右上分别对应的是main.s和main.c的代码, 左下和右下则是swap.sswap.c的代码.

我使用的编译指令是 :

gcc -m32 -S main.c -o main.s
gcc -m32 -S swap.c -o swap.s

我的问题 :

  1. main.s(左上)中, .data段不应该用来放数据的吗? 那么全局变量buf 为什么不在.data段后面 ?

  2. .comm 这一行是什么意思 ?

  3. 函数swap()不是没有在main.c中定义吗, 那么这里(main.s中)根本就没有反映出swap()没有定义, 那汇编器是如何知道swap()没有定义的呢?

  4. 我在swap.c中定义的了两个bufp0, 可以看到那个local的bufp0被改成了bufp0.1483(左下的第23行), 我记得直接被定义为0的值是要被放在.bss里面的, 但是这里根本看不到.bss这又是为什么呢?

  5. 生成的代码中有很多黄色的代码, 像LFB0, .cfi_startproc 等等, 这些在书中也根本没提到, 这些又是干什么的呢?


对汇编没有了解很多。。
不过gcc默认生成的是AT&T格式的汇编代码,有些东西需要系统的学习或者有个浅显的认识才会了解你上面所说的这些东西吧,你或许需要讲解汇编更专业一点的书籍。。
不过我可以回答你的第3题,汇编器只负责生成汇编代码,函数定义有没有的问题 在链接的阶段才会 凸显出来。。

【热门文章】
【热门文章】