博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gcc -S xx
阅读量:5290 次
发布时间:2019-06-14

本文共 663 字,大约阅读时间需要 2 分钟。

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

实际上, 是一个适合多种 CPU 架构的编译器,不会把C程序语句直接翻译成目标机器的汇编语言,而是在输入语言和输出汇编语言之间,利用一个中间语言,称为 RegisterTransfer Language(简称 RTL,寄存器传输语言)。借助于这个抽象层,在任何背景下,编译器可以选择最经济的方式对给定的操作编码。
而且,在交互文件中针对目标机器的抽象描述,为编译器重新定向到新架构提供了一个结构化的方式。但是,从 GCC 用户角度来看,我们可以忽略这个中间步骤。

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

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

$ gcc -S circle.c

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

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

$ gcc -S -fverbose-asm circle.c

 

转载于:https://www.cnblogs.com/liuzhenbo/p/11030878.html

你可能感兴趣的文章
Java动态代理的两种实现方式:
查看>>
PHP trait
查看>>
Redis的常用命令(三)
查看>>
HDOJ 4749 Parade Show
查看>>
python 多线程并发threading & 任务队列Queue
查看>>
【黑马程序员】资深程序员的见解
查看>>
1_fbauto
查看>>
IO体系、集合体系、多线程、jdbc
查看>>
Service Bus Namespace 和 Access Control
查看>>
关于时间:UTC/GMT/xST/ xDT
查看>>
[51Nod1089] 最长回文子串 V2(Manacher算法)
查看>>
Asp.Net生命周期系列六
查看>>
php引用 =& 详解
查看>>
面向对象思想
查看>>
查看数据是否启动
查看>>
如何正确的完全卸载MySQL
查看>>
Codeforces 914D Bash and a Tough Math Puzzle (ZKW线段树)
查看>>
static使用方法小结
查看>>
Android 布局学习之——Layout(布局)具体解释二(常见布局和布局參数)
查看>>
Quick Tip: How to Add Syntax Highlighting to Any Project
查看>>