一、编译器和解释器的基础知识(II)
1、编译器
编译阶段要做的工作是用交叉编译或汇编工具处理源代码,产生目标文件。
一般来说,优秀的嵌入式 C 编译器所生成的代码,其长度和执行 时间仅比用汇编语言编写的代码长5%~20%。
GNU C/C++(gcc) 是目前比较常用的一种交叉编译器,它支持非常多的宿主机/目标机组合。宿主机可以是Unix 、AIX 、Solaris 、Windows 、Linux 等操作系统, 目标机可以是 x86 、Power PC 、MIPS 、SPARC 、Motorola 68K 等各种类型的处理器。
gcc 识别的文件类型主要包括: C 语言文件、C++ 语言文件、预处理后的C 文件、预处理后的 C++文件、汇编语言文件、目标文件、静态链接库、动态链接库等。以C 程序为例, gcc 的编译过程主要分为4个阶段:
(1)预处理阶段,即完成宏定义和 include 文件展开等工作;
(2)根据编译参数进行不同程度的优化,编译成汇编代码;
(3)用汇编器把上一阶段生成的汇编码进一步生成目标代码;
(4)用连接器把上一阶段生成的目标代码、其他一些相关的系统目标代码以及系统的库函数连接起来,生成最终的可执行代码。
二、汇编语言
1、指令语句
指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。例如,表示传数据、相加、相减和与运算的 MOV、ADD 、SUB 和 AND 等,书写指令语句时必须遵循指令的格式要求。
指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和
处理器控制指令等。
2、伪指令语句
伪指令语句指示汇编程序在对源程序进行汇编时完成某些工作。例如,给变量分配存储单元地址,给某个符号赋一个值等。伪指令语句与指令语句的区别是:伪指令 语句经汇编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外, 伪指令语句所指示的操作是在源程序被汇编时完成的,而指令语句的操作必须在程序运行时完成。