编译原理笔记【第十章目标代码生成】

文章目录

  • 第一节 目标代码生成概述
    • 1.1 目标代码生成的任务
  • 1.2 主要问题
  • 1.3 GAM
  • 第二节 简单代码生成
    • 2.1 x=y
    • 2.2 x=-y
    • 2.3 x=y+z
    • 2.4 转移语句
  • 第三节 寄存器分配
    • 3.1 合理分配寄存器
    • 3.2 变量的访问和回写
    • 3.3 寄存器分配实例
    • 3.4 寄存器分配方法
  • 第四节 存储空间分配
    • 4.1 程序的存储空间
    • 4.2 活动记录
    • 4.3 参数传递
    • 4.4 非局部变量

第一节 目标代码生成概述

1.1 目标代码生成的任务

将中间代码翻译成等价的目标代码
输入:中间代码(三地址码)
输出:目标代码(汇编代码)

1.2 主要问题

针对特定的目标计算机,目标代码生成需考虑的主要问题包括:

  1. 目标计算机的指令系统
  2. 目标计算机的寄存器分配
  3. 目标计算机的存储空间分配

1.3 GAM

编译原理笔记【第十章目标代码生成】_第1张图片

编译原理笔记【第十章目标代码生成】_第2张图片

编译原理笔记【第十章目标代码生成】_第3张图片

编译原理笔记【第十章目标代码生成】_第4张图片

编译原理笔记【第十章目标代码生成】_第5张图片

编译原理笔记【第十章目标代码生成】_第6张图片

编译原理笔记【第十章目标代码生成】_第7张图片

编译原理笔记【第十章目标代码生成】_第8张图片

编译原理笔记【第十章目标代码生成】_第9张图片

第二节 简单代码生成

不涉及函数代码生成
复杂代码涉及
编译原理笔记【第十章目标代码生成】_第10张图片

2.1 x=y

编译原理笔记【第十章目标代码生成】_第11张图片

2.2 x=-y

编译原理笔记【第十章目标代码生成】_第12张图片

2.3 x=y+z

编译原理笔记【第十章目标代码生成】_第13张图片

2.4 转移语句

编译原理笔记【第十章目标代码生成】_第14张图片

第三节 寄存器分配

3.1 合理分配寄存器

编译原理笔记【第十章目标代码生成】_第15张图片

3.2 变量的访问和回写

编译原理笔记【第十章目标代码生成】_第16张图片

3.3 寄存器分配实例

编译原理笔记【第十章目标代码生成】_第17张图片
编译原理笔记【第十章目标代码生成】_第18张图片
编译原理笔记【第十章目标代码生成】_第19张图片
编译原理笔记【第十章目标代码生成】_第20张图片
编译原理笔记【第十章目标代码生成】_第21张图片

3.4 寄存器分配方法

编译原理笔记【第十章目标代码生成】_第22张图片

第四节 存储空间分配

4.1 程序的存储空间

编译原理笔记【第十章目标代码生成】_第23张图片

4.2 活动记录

编译原理笔记【第十章目标代码生成】_第24张图片

4.3 参数传递

在这里插入图片描述

4.4 非局部变量

编译原理笔记【第十章目标代码生成】_第25张图片

你可能感兴趣的:(编译原理)