> For the complete documentation index, see [llms.txt](https://ryukiedev.gitbook.io/wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ryukiedev.gitbook.io/wiki/zhi-shi-dian-shu-li/zhi-shi-dian-shu-li-si-ji-suan-ji-ji-chu.md).

# 06 知识点梳理：计算机基础

**1:预编译：主要处理以“#”开始的预编译指令。**

**2:编译：**

* 词法分析：将字符序列分割成一系列的记号。
* 语法分析：根据产生的记号进行语法分析生成语法树。
* 语义分析：分析语法树的语义，进行类型的匹配、转换、标识等。
* 中间代码生成：源码级优化器将语法树转换成中间代码，然后进行源码级优化，比如把 1+2 优化为 3。中间代码使得编译器被分为前端和后端，不同的平台可以利用不同的编译器后端将中间代码转换为机器代码，实现跨平台。
* 目标代码生成：此后的过程属于编译器后端，代码生成器将中间代码转换成目标代码（汇编代码），其后目标代码优化器对目标代码进行优化，比如调整寻址方式、使用位移代替乘法、删除多余指令、调整指令顺序等。

**3:汇编：汇编器将汇编代码转变成机器指令。**

* 静态链接：链接器将各个已经编译成机器指令的目标文件链接起来，经过重定位过后输出一个可执行文件。
* 装载：装载可执行文件、装载其依赖的共享对象。
* 动态链接：动态链接器将可执行文件和共享对象中需要重定位的位置进行修正。
* 最后，进程的控制权转交给程序入口，程序终于运行起来了。
