作品简介

本书以作者实现的一个基于Intelx86指令集的编译系统为例,结合程序代码的主要部分详细阐述了编译系统的实现原理和过程。

本书对编译器、汇编器、链接器、编译优化器涉及的关键算法、数据结构和程序实现流程,以及ELF文件的格式、Intel指令格式均作了详细的说明,并结合大量的图表,展示了编译系统工作过程中代码信息的流动和存储格式的变化。是一本“手把手”教读者实现编译系统的贴心手册。

作品目录

  • 前言
  • 第1章 代码背后
  • 1.1 从编程聊起
  • 1.2 历史渊源
  • 1.3 GCC的工作流程
  • 1.3.1 预编译
  • 1.3.2 编译
  • 1.3.3 汇编
  • 1.3.4 链接
  • 1.4 设计自己的编译系统
  • 1.5 本章小结
  • 第2章 编译系统设计
  • 2.1 编译程序的设计
  • 2.1.1 词法分析
  • 2.1.2 语法分析
  • 2.1.3 符号表管理
  • 2.1.4 语义分析
  • 2.1.5 代码生成
  • 2.1.6 编译优化
  • 2.2 x86指令格式
  • 2.3 ELF文件格式
  • 2.4 汇编程序的设计
  • 2.4.1 汇编词法、语法分析
  • 2.4.2 表信息生成
  • 2.4.3 指令生成
  • 2.5 链接程序的设计
  • 2.5.1 地址空间分配
  • 2.5.2 符号解析
  • 2.5.3 重定位
  • 2.6 本章小结
  • 第3章 编译器构造
  • 3.1 词法分析
  • 3.1.1 扫描器
  • 3.1.2 词法记号
  • 3.1.3 有限自动机
  • 3.1.4 解析器
  • 3.1.5 错误处理
  • 3.2 语法分析
  • 3.2.1 文法定义
  • 3.2.2 递归下降子程序
  • 3.2.3 错误处理
  • 3.3 符号表管理
  • 3.3.1 符号表数据结构
  • 3.3.2 作用域管理
  • 3.3.3 变量管理
  • 3.3.4 函数管理
  • 3.4 语义分析
  • 3.4.1 声明与定义语义检查
  • 3.4.2 表达式语义检查
  • 3.4.3 语句语义检查
  • 3.4.4 错误处理
  • 3.5 代码生成
  • 3.5.1 中间代码设计
  • 3.5.2 程序运行时存储
  • 3.5.3 函数定义与return语句翻译
  • 3.5.4 表达式翻译
  • 3.5.5 复合语句与break、continue语句翻译
  • 3.5.6 目标代码生成
  • 3.5.7 数据段生成
  • 3.6 本章小结
  • 第4章 编译优化
  • 4.1 数据流分析
  • 4.1.1 流图
  • 4.1.2 数据流分析框架
  • 4.2 中间代码优化
  • 4.2.1 常量传播
  • 4.2.2 复写传播
  • 4.2.3 死代码消除
  • 4.3 寄存器分配
  • 4.3.1 图着色算法
  • 4.3.2 变量栈帧偏移计算
  • 4.4 窥孔优化
  • 4.5 本章小结
  • 第5章 二进制表示
  • 5.1 x86指令
  • 5.1.1 指令前缀
  • 5.1.2 操作码
  • 5.1.3 ModR/M字段
  • 5.1.4 SIB字段
  • 5.1.5 偏移
  • 5.1.6 立即数
  • 5.1.7 AT&T汇编格式
  • 5.2 ELF文件
  • 5.2.1 文件头
  • 5.2.2 段表
  • 5.2.3 程序头表
  • 5.2.4 符号表
  • 5.2.5 重定位表
  • 5.2.6 串表
  • 5.3 本章小结
  • 第6章 汇编器构造
  • 6.1 词法分析
  • 6.1.1 词法记号
  • 6.1.2 有限自动机
  • 6.2 语法分析
  • 6.2.1 汇编语言程序
  • 6.2.2 数据定义
  • 6.2.3 指令
  • 6.3 符号表管理
  • 6.3.1 数据结构
  • 6.3.2 符号管理
  • 6.4 表信息生成
  • 6.4.1 段表信息
  • 6.4.2 符号表信息
  • 6.4.3 重定位表信息
  • 6.5 指令生成
  • 6.5.1 双操作数指令
  • 6.5.2 单操作数指令
  • 6.5.3 零操作数指令
  • 6.6 目标文件生成
  • 6.7 本章小结
  • 第7章 链接器构造
  • 7.1 信息收集
  • 7.1.1 目标文件信息
  • 7.1.2 段数据信息
  • 7.1.3 符号引用信息
  • 7.2 地址空间分配
  • 7.3 符号解析
  • 7.3.1 符号引用验证
  • 7.3.2 符号地址解析
  • 7.4 重定位
  • 7.5 程序入口点与运行时库
  • 7.6 可执行文件生成
  • 7.7 本章小结
  • 参考文献
展开全部