一、预编译
.i
处理 “#”
(1)删除#define,并作文件替换
(2)递归展开头文件(头文件里还可以嵌套)
(3)处理预编译指令( 如#if #endif)
(4)删除所有注释
(5)添加行号和文件名标识
(6)保留#pragma指令
二、编译
.s
(1)词法分析
(2)语法分析(一行表达式)
(3)语义分析(结合上下文)
(4)代码优化
(5)生成汇编指令 (仍是低级语言)
三、汇编
.o
翻译指令(把低级语言翻译成计算机语言)
四、链接
.exe
(1)合并段和符号表
(2)符号解析
(3)分配地址和空间:程序和虚拟地址空间的映射
(4)符号的重定位
链接阶段八成以上的错误都发生在符号解析过程中
五、运行
(1)建立虚拟地址空间和物理内存的映射(创建内核映射结构体),创建页目录页表
(2)加载指令和数据
(3)把程序的入口地址放到下一行指令寄存器