在计算机系统中,高级语言编写的源程序并不能被计算机直接执行。计算机只能识别由“0”和“1”组成的机器指令。因此,必须经过一系列步骤,将源程序逐步转换为可执行的机器代码。整个过程通常包括四个阶段:预处理、编译、汇编和链接。
一、预处理(Preprocessing)
预处理是源程序被正式编译之前的准备阶段。主要任务包括:
- 文件包含处理:将程序中用
#include指令指定的头文件内容插入到源程序中; - 宏替换:将使用
#define定义的宏常量或宏函数进行文本替换; - 条件编译:根据
#if、#ifdef等条件编译指令,选择性地保留或忽略部分代码。
经过预处理后,生成的文件仍然是源代码形式,但已展开了所有头文件和宏定义,便于后续编译器分析。
二、编译(Compilation)
编译阶段是将经过预处理的源程序翻译成汇编语言程序的过程。该阶段由编译器完成,主要步骤如下:
- 词法和语法分析:检查程序的语法是否正确;
- 语义分析和优化:分析变量类型、表达式合法性,并进行优化;
- 生成汇编代码:将优化后的中间表示转化为汇编语言。
编译结果通常是一个以 .s 为后缀的汇编程序文件,这是介于高级语言和机器语言之间的一种低级语言形式。
三、汇编(Assembling)
汇编阶段由汇编程序完成,其主要任务是将汇编语言程序转换为机器语言目标代码文件。在此阶段:
- 汇编器把每条汇编指令翻译成相应的机器指令;
- 生成的目标文件通常以
.o或.obj为扩展名; - 文件中包含可重定位的机器代码、符号表和重定位信息。
此时得到的目标文件尚不能直接运行,因为其中的外部引用(如函数库)尚未被解析。
四、链接(Linking)
链接是将多个目标文件以及所需的库函数(如标准库中的 printf() 函数)结合起来,生成最终可执行文件的过程。链接器的主要工作包括:
- 符号解析:确定每个函数和变量的实际存储地址;
- 重定位:修正程序中与地址相关的指令和数据;
- 库链接:将静态库或动态库中的目标代码加入到最终程序中。
链接完成后,生成的文件即为可执行文件,包含完整的机器指令,能够被操作系统加载并执行。
五、总结
高级语言源程序生成机器代码的全过程可概括为:

预处理 → 编译 → 汇编 → 链接 → 可执行文件
- 预处理:展开宏和头文件,形成完整源文件;
- 编译:将源代码翻译为汇编代码;
- 汇编:将汇编代码转换为机器语言目标文件;
- 链接:整合目标文件和库,生成可执行程序。
这一系列步骤实现了从人类可读的源代码到计算机可执行机器指令的转化,是程序执行的基础过程。
4275

被折叠的 条评论
为什么被折叠?



