自己动手构造编译系统:编译、汇编与链接1.3.2 编译

简介:

1.3.2  编译

  

     接下来GCC对hello.i进行编译,命令如下:

$gcc –S hello.i –o hello.s

  编译后产生的汇编文件hello.s内容如下:

     .file                "hello.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, %eax

     movl              %eax, (%esp)

     call                 printf

     movl              $0, %eax

     leave

     ret

     .size         main, .-main

     .ident        "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"

     .section     .note.GNU-stack,"",@progbits

  GCC生成的汇编代码的语法是AT&T格式,与Intel格式的汇编有所不同(若要生成Intel格式的汇编代码,使用编译选项“-masm=intel”即可)。比如立即数用“$”前缀,寄存器用“%”前缀,内存寻址使用小括号等。区别最大的是,AT&T汇编指令的源操作数在前,目标操作数在后,这与Intel汇编语法正好相反。本书会在后续章节中详细描述这两种汇编语法格式的区别。

  不过我们仍能从中发现高级语言代码中传递过来的信息,比如字符串“Hello World!”、主函数名称main、函数调用call printf等。

相关文章
|
6天前
|
存储 自然语言处理 编译器
编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)
编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)
|
6天前
|
存储 缓存 Linux
C语言编译过程——预处理、编译汇编和链接详解
C语言编译过程——预处理、编译汇编和链接详解
|
12月前
|
C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
12月前
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
5天前
|
存储 编译器
C51汇编程序
C51汇编程序
11 5
|
12月前
|
存储 Java C++
汇编语言、寄存器分类及程序计数器
汇编语言、寄存器分类及程序计数器
90 0
|
12月前
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
程序员 芯片 流计算
MOTOROLA MVME 162-01 直接用汇编语言编程的计算机程序
MOTOROLA MVME 162-01 直接用汇编语言编程的计算机程序
87 0
MOTOROLA MVME 162-01 直接用汇编语言编程的计算机程序
|
存储 API C语言
从反汇编看恶意程序的C语言结构(二)
从反汇编看恶意程序的C语言结构
96 0
|
编译器 API 分布式数据库
从反汇编看恶意程序的C语言结构(一)
从反汇编看恶意程序的C语言结构
116 0