编译器的核心任务是把C程序翻译成机器的汇编语言(assembly language)。汇编语言是人类可以阅读的编程语言,也是相当接近实际机器码的语言。由此导致每种 CPU 架构都有不同的汇编语言。

实际上,GCC 是一个适合多种 CPU 架构的编译器,不会把C程序语句直接翻译成目标机器的汇编语言,而是在输入语言和输出汇编语言之间,利用一个中间语言,称为 RegisterTransfer Language(简称 RTL,寄存器传输语言)。借助于这个抽象层,在任何背景下,编译器可以选择最经济的方式对给定的操作编码。

而且,在交互文件中针对目标机器的抽象描述,为编译器重新定向到新架构提供了一个结构化的方式。但是,从 GCC 用户角度来看,我们可以忽略这个中间步骤。

通常情况下,GCC 把汇编语言输出存储到临时文件中,并且在汇编器执行完后立刻删除它们。但是可以使用-S选项,让编译程序在生成汇编语言输出之后立刻停止。

如果没有指定输出文件名,那么采用-S选项的 GCC 编译过程会为每个被编译的输入文件生成以.s作为后缀的汇编语言文件。如下例所示:

$ gcc -S circle.c

编译器预处理 circle.c,将其翻译成汇编语言,并将结果存储在 circle.s 文件中。

如果想把C语言变量的名称作为汇编语言语句中的注释,可以加上-fverbose-asm选项:

$ gcc -S -fverbose-asm circle.c

最新文章

  1. 还记得高中的向量吗?leetcode 335. Self Crossing(判断线段相交)
  2. hihoCoder太阁最新面经算法竞赛18
  3. 【转】Hadoop集群添加磁盘步骤
  4. Android 沉浸式状态栏
  5. hdu----(1671)Phone List(Trie带标签)
  6. uploadify上传控件使用
  7. JDK和JVM
  8. HBase的基本操作
  9. BZOJ 3669: [Noi2014]魔法森林( LCT )
  10. 基于多重信号分类算法的DOA估计
  11. STM32之FreeRTOS
  12. 模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
  13. Android不编译某个模块
  14. Is It A Tree?
  15. Linux - 动态(Dynamic)与静态(Static)函数库
  16. C#获取本周五日期字符串
  17. 【BZOJ4061】[Cerc2012]Farm and factory(最短路,构造)
  18. Python的学习之-计算机编码和二进制
  19. REST-assured 3发送图片
  20. 带你从零学ReactNative开发跨平台App开发(六)

热门文章

  1. 使用SSH工具连接WSL
  2. 微服务中一个项目install打包总是失败
  3. git 常见错误
  4. 《新标准C++程序设计》1.1-1.6(C++学习笔记1)
  5. 用Maven整合SSM项目实例
  6. 用豆瓣加速安装pandas、numpy、matplotlib(画图)
  7. python数据拼接: pd.concat
  8. jenkins+saltstack+pipeline 部署springcloud 多模块jar包
  9. (1)opencv的安装和遇到的问题
  10. HTML 回到顶部 浮动