文档详情

嵌入式C程序的编译与调试.ppt

发布:2025-04-10约2.69千字共10页下载文档
文本预览下载声明

词法分析语法分析,翻译成等价的中间代码表示或汇编代码。预编译程序所要作得工作:3.1.2.2编译阶段3.1.2.3优化阶段优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系中间代码的优化不依赖于具体的计算机主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,目标代码的生成优化依赖于具体的计算机充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数对指令进行一些调整使目标代码比较短,执行的效率比较高经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行3.1.2.4汇编阶段汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成代码段该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。数据段主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。3.1.2.4汇编阶段UNIX环境下主要有三种类型的目标文件:可重定位文件其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。共享的目标文件这种文件存放了适合于在两种上下文里链接的代码和数据。第一种事链接程序可把它与其它可重定位文件及共享的目标文件一起处理来创建另一个目标文件;第二种是动态链接程序将它与另一个可执行文件及其它的共享目标文件结合到一起,创建一个进程映象。可执行文件它包含了一个可以被操作系统创建一个进程来执行之的文件。汇编程序生成的实际上是第一种类型的目标文件。对于后两种还需要其他的一些处理方能得到,这个就是链接程序的工作了。21链接程序是将有关的目标文件彼此相连接,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。目标文件由段组成链接处理可分为两种:静态链接动态链接3.1.2.5链接阶段01makefile是用于自动编译和链接的makefile能够纪录文件的信息,决定在链接的时候需要重新编译哪些文件023.1.3Makefile创建过程01编译02链接03定址043.2嵌入式C程序的编译过程源文件都被编译或汇编到一个目标文件(objectfile)01可重定位程序(relocatableprogram)02重定址(relocation)的过程03源代码转换为可执行的二进制映像的过程3.2.1创建过程3.2.2编译编译器的工作主要是把用人可读的语言所书写的程序,翻译为特定的处理器上等效的一系列操作码。创建过程编译链接定址3.2.3链接创建过程编译链接定址3.2.4定址A.out及其传说段操作系统在a.out里干了什么C语言运行在a.out里干了什么函数调用时发生了什么Auto和static关键字Unix/Linux的堆栈段MS-DOS的堆栈段3.3程序运行3.3.1A.out及其传说A.out-----“assembleroutput(汇编程序输出)”的缩写形式a.out文件格式分析a.out文件包含7个section,格式如下:execheader(执行头部,也可理解为文件头部)textsegment(文本段)datasegment(数据段)textrelocations(文本重定位段)datarelocations(数据重定位段)symboltable(符号表)stringtable(字符串表)a.out是早期UNIX系统使用的可执行文件格式,由ATT设计,现在基本上已被ELF文件格式代替段(segments):是二进制文件中简单的区域,里面保存了和某种特定类型(如符号表条目)相关的所有信息01段可以方便地映射到链接器在运行时可以直接载入的对象中02段在正在执行的程序中是一块内存区域,每个区域都有特定的目的033.3.2段为什么a.out要以段的形式组织段可以方便地映射到链接器在运行时可以直接载入的对象中!段在正在执行的程序中是一块内存区域,每个区域都有特定的目的段特点文本段包含序的指令数据段包含经过初始化的全局和静态变量以及它们的值堆栈段用于保存局部变量、临时数据、传递到函数中的参数3.3.3操作系统在a.out里干了什么01C语言编译过程

显示全部
相似文档