编译原理
  • 编译原理
  • 一些简答题
  • 绪论
    • 编译器简介
    • 程序设计语言
    • 静态与动态
    • 参数传递机制
  • 词法分析
    • 词法单元、模式、词素
    • 串和语言
    • 正则表达式
    • 状态转换图
    • 不确定有穷自动机NFA
    • 确定有穷自动机DFA
    • 算法:正则表达式转NFA
    • 自动机到词法分析器
  • 语法分析
    • 语法分析器
    • 上下文无关文法
    • 二义性和左递归
    • 递归下降语法分析
    • 算法:求解FIRST集和FOLLOW集
    • 算法:LL(1)
    • 自底向上语法分析
    • 移入-归约语法分析
    • 算法:LR(0)
    • 算法:SLR(1)
    • 算法:LR(1)
    • 算法:LALR
    • LR分析器和LALR分析器
  • 语法制导
    • 语法制导定义(SDD)
    • 综合属性和继承属性
    • 语法树上的SDD求值
    • 依赖图
    • L属性的SDD
    • 类型
    • SDD的应用
  • 中间代码生成
    • 三地址代码
    • SSA(静态单赋值)
    • 类型和声明
    • 表达式的翻译
    • 类型检查
    • 控制流
    • 回填
  • 运行时刻环境
    • 存储组织
    • 栈式分配
    • 栈中非局部数据的访问
    • 堆管理
    • 垃圾回收
  • 代码生成
    • 代码生成器的设计
    • 目标语言
    • 目标代码中的地址
    • 基本块和流图
    • 基本块的优化
Powered by GitBook
On this page
  • 目标机模型
  • 指令
  • 寻址模式
  • 程序及指令的代价
  1. 代码生成

目标语言

目标机模型

使用三地址机器的模型,与三地址码的关键区别:寄存器

寄存器是位于CPU内部用于存放数据的小型高速存储区域,几乎所有的CPU计算都需要寄存器参与(存放参数/结果),几乎所有参与计算的程序数据都位于内存中(使用外存数据也必须先读入内存),机器码需要频繁地在寄存器与内存之间搬运数据。

指令

  • 加载:LD dst,addr 把地址addr中的内容加载到dst所指的寄存器

  • 保存:ST x,r 把寄存器r中的内容保存到x中

  • 计算:<OP> dst,src1,src2 把src1和src2中的值运算后将结果存放到dst中

  • 无条件跳转:BR L 控制流转向标号L的指令

  • 条件跳转:B<cond> r,L 对r中的值进行测试,如果为真则转向L,cond代表对寄存器r中的值做某个常见测试,如BLTZ r,L 表示当r<0时跳转到L

寻址模式

  • 变量x:指向分配x的内存位置

  • a(r):地址是a的左值加上寄存器r中的值

  • constant(r):寄存器r中内容加上前面的常数即其地址

  • *r:寄存器r的内容所表示的位置上存放的内容位置(解引用r)

  • *constant(r):寄存器中内容加上常量所代表的位置上的内容所表示的位置

  • 常量#constant

程序及指令的代价

不同的目的有不同的度量(最短编译时间、运行时间、目标程序大小、能耗)。不可判定一个目标程序是否最优。

Previous代码生成器的设计Next目标代码中的地址

Last updated 4 months ago