内容简介
本书以作者实现的一个基于Intelx86指令集的编译系统为例,结合程序代码的主要部分详细阐述了编译系统的实现原理和过程。
本书对编译器、汇编器、链接器、编译优化器涉及的关键算法、数据结构和程序实现流程,以及ELF文件的格式、Intel指令格式均作了详细的说明,并结合大量的图表,展示了编译系统工作过程中代码信息的流动和存储格式的变化。
是一本“手把手”教读者实现编译系统的贴心手册。
目录
序
前言
第1章 代码背后 1
1.1 从编程聊起 1
1.2 历史渊源 2
1.3 GCC的工作流程 3
1.3.1 预编译 4
1.3.2 编译 5
1.3.3 汇编 6
1.3.4 链接 7
1.4 设计自己的编译系统 8
1.5 本章小结 9
第2章 编译系统设计 11
2.1 编译程序的设计 11
2.1.1 词法分析 12
2.1.2 语法分析 13
2.1.3 符号表管理 14
2.1.4 语义分析 15
2.1.5 代码生成 16
2.1.6 编译优化 16
2.2 x86指令格式 18
2.3 ELF文件格式 19
2.4 汇编程序的设计 21
2.4.1 汇编词法、语法分析 22
2.4.2 表信息生成 23
2.4.3 指令生成 24
2.5 链接程序的设计 25
2.5.1 地址空间分配 25
2.5.2 符号解析 26
2.5.3 重定位 27
2.6 本章小结 27
第3章 编译器构造 29
3.1 词法分析 29
3.1.1 扫描器 30
3.1.2 词法记号 32
3.1.3 有限自动机 36
3.1.4 解析器 40
3.1.5 错误处理 53
3.2 语法分析 55
3.2.1 文法定义 55
3.2.2 递归下降子程序 65
3.2.3 错误处理 70
3.3 符号表管理 74
3.3.1 符号表数据结构 75
3.3.2 作用域管理 78
3.3.3 变量管理 82
3.3.4 函数管理 88
3.4 语义分析 93
3.4.1 声明与定义语义检查 93
3.4.2 表达式语义检查 95
3.4.3 语句语义检查 97
3.4.4 错误处理 98
3.5 代码生成 101
3.5.1 中间代码设计 102
3.5.2 程序运行时存储 105
3.5.3 函数定义与return语句翻译 108
3.5.4 表达式翻译 110
3.5.5 复合语句与break、continue
语句翻译 120
3.5.6 目标代码生成 132
3.5.7 数据段生成 141
3.6 本章小结 145
第4章 编译优化 147
4.1 数据流分析 149
4.1.1 流图 149
4.1.2 数据流分析框架 152
4.2 中间代码优化 155
4.2.1 常量传播 155
4.2.2 复写传播 167
4.2.3 死代码消除 172
4.3 寄存器分配 177
4.3.1 图着色算法 177
4.3.2 变量栈帧偏移计算 182
4.4 窥孔优化 187
4.5 本章小结 190
第5章 二进制表示 191
5.1 x86指令 191
5.1.1 指令前缀 192
5.1.2 操作码 194
5.1.3 ModR/M字段 196
5.1.4 SIB字段 198
5.1.5 偏移 201
5.1.6 立即数 201
5.1.7 AT&T汇编格式 202
5.2 ELF文件 204
5.2.1 文件头 205
5.2.2 段表 207
5.2.3 程序头表 209
5.2.4 符号表 213
5.2.5 重定位表 214
5.2.6 串表 215
5.3 本章小结 217
第6章 汇编器构造 219
6.1 词法分析 220
6.1.1 词法记号 220
6.1.2 有限自动机 222
6.2 语法分析 223
6.2.1 汇编语言程序 223
6.2.2 数据定义 225
6.2.3 指令 226
6.3 符号表管理 227
6.3.1 数据结构 228
6.3.2 符号管理 230
6.4 表信息生成 234
6.4.1 段表信息 235
6.4.2 符号表信息 238
6.4.3 重定位表信息 239
6.5 指令生成 246
6.5.1 双操作数指令 247
6.5.2 单操作数指令 251
6.5.3 零操作数指令 254
6.6 目标文件生成 255
6.7 本章小结 261
第7章 链接器构造 263
7.1 信息收集 264
7.1.1 目标文件信息 264
7.1.2 段数据信息 266
7.1.3 符号引用信息 268
7.2 地址空间分配 269
7.3 符号解析 272
7.3.1 符号引用验证 274
7.3.2 符号地址解析 276
7.4 重定位 277
7.5 程序入口点与运行时库 281
7.6 可执行文件生成 283
7.7 本章小结 290
参考文献 291
1. 本站分享的所有书籍均来源于自互联网,我们只进行收集整理,并不对书籍内容进行更改。
2. 部分书籍中可能有书籍压制者放置的广告,这并不是本站所为,请注意甄别。
3. 我们分享这些书籍,纯粹是出于知识分享的热情,以及对互联网分享精神的高度认同和践行,不以盈利为目的。
4. 本站分享的所有书籍,仅供个人学习研究使用,请勿用于任何商业用途,否则产生的一切法律纠纷与本站无关。
5. 如果这些书籍让你有所收获,在条件允许的情况下,请一定购买正版书籍,这是对创作者最好的支持。
6. 如果您是此书籍的版权所有者,且您不希望此作品出现在本站,请联系我们,我们将在收到您的请求后48小时内予以删除。
📖 支持知识自由流动
每一本书的稳定访问,都离不开服务器、存储与带宽的长期维护。






