中国高校课件下载中心 》 教学资源 》 大学文库

《编译原理》课程教学课件(PPT讲稿)第10章 代码优化和目标代码生成-2目标代码生成

文档信息
资源类别:文库
文档格式:PPT
文档页数:16
文件大小:1.13MB
团购合买:点击进入团购
内容简介
《编译原理》课程教学课件(PPT讲稿)第10章 代码优化和目标代码生成-2目标代码生成
刷新页面文档预览

第10章(2)代码生成 ■基本问题 ■且标机器模型 ■一个简单的代码生成器 0 寄存器分配(略) ■DAG的目标代码(略) ■作业 2025/4/2 课程目绿因 1/16

2025/4/2 第10章 (2) 代码生成 ◼ 基本问题 ◼ 目标机器模型 ◼ 一个简单的代码生成器 ◼ 寄存器分配(略) ◼ DAG的目标代码(略) ◼ 作业 课程目录 1/16

代码生成概述p279 ■逻辑阶段编译程序的最后一个阶段 ■输入和输出中间代码 等价的目标代码 ■目标代码的一般形式 ◆汇编语言代码 ▣优点:目标程序好读、可移植 0 缺点:需经汇编器辅助代码生成 ■代码生成器的设计环境 ·要依赖于目标机器、指令系统和操作系统。 ■指令选择指令集丰富、选择合适。 ■寄存器分配有效合理使用寄存器、提高代码质量。 ■计算顺序选择影响代码的有效性。 2025/4/2 国) 2/16

2025/4/2 代码生成概述 p279 ◼ 逻辑阶段 编译程序的最后一个阶段 ◼ 输入和输出 中间代码 等价的目标代码 ◼ 目标代码的一般形式 ◆汇编语言代码 优点:目标程序好读、可移植 缺点:需经汇编器辅助代码生成 ◼ 代码生成器的设计环境 ◆ 要依赖于目标机器、指令系统和操作系统。 ◼ 指令选择 指令集丰富、选择合适。 ◼ 寄存器分配 有效合理使用寄存器、提高代码质量。 ◼ 计算顺序选择 影响代码的有效性。 2/16

目标代码生成器的基本设计要求 ■使所生成的目标代码尽可能的短 能较充分地发挥目标计算机可用资 源的效率 例如: ◆尽可能地使用执行速度快的指令 ◆充分利用计算机的寄存器和变址器, 以节省访问内存的时间 2025/4/2 章节目录冈区 3/16

2025/4/2 目标代码生成器的基本设计要求 ◼ 使所生成的目标代码尽可能的短 ◼ 能较充分地发挥目标计算机可用资 源的效率 例如: ◆尽可能地使用执行速度快的指令 ◆充分利用计算机的寄存器和变址器, 以节省访问内存的时间 章节目录 3/16

10.4.1目标机模型假想的计算机模型p280 ■常备指令arc一源操作数dst一目的操作数 指令形式 意义 举例 LD dst,arc (arc)→dst LDR1,B(B)→R1 MOVE LDR1,#11→R1 LDR1,*(4(R0))(Ro)+4)→R1 ST arc,dst (arc)→dst STR1,B(R1)→B ADD dst,arc (dst)+(arc)→dst ADD R1,Ro(R1)+(Ro)→R1 SUB dst,arc (dst)-(arc)→dst SUB R1,T1(R1)-(T)→R1 MUL dst,arc (dst)*(arc)→dst MUL R1,D(R1)*(D)→R1 DIV dst,arc (dst)/(arc)→dst DIV R1,A(R1)/(A)→R 2025/4/2 章节目录国回 4/16

2025/4/2 10.4.1 目标机模型 假想的计算机模型 p280 ◼ 常备指令 arc—源操作数 dst—目的操作数 指令形式 意 义 举 例 LD dst,arc (arc)dst LD R1,B (B)R1 MOVE LD R1,#1 1R1 LD R1,*(4(R0))(((R0)+4))R1 ST arc,dst (arc)dst ST R1,B (R1)B ADD dst,arc (dst)+(arc)dst ADD R1,R0 (R1)+(R0)R1 SUB dst,arc (dst)-(arc)dst SUB R1,T1 (R1)-(T1)R1 MUL dst,arc (dst)*(arc)dst MUL R1,D (R1)*(D)R1 DIV dst,arc (dst)/(arc)dst DIV R1,A (R1)/(A)R1 章节目录 4/16

10.4.2一个简单的代码生成器 概述 寄存器描述和地址描述 ■子 ■简单代码生成算法 2025/4/2 章节目录冈) 5/16

2025/4/2 10.4.2 一个简单的代码生成器 ◼概述 ◼寄存器描述和地址描述 ◼简单代码生成算法 章节目录 5/16

概述 p283 ■算法策略 ◆依次把每条中间代码变换成目标代码 ·在一个基本块范围内充分利用寄存器 ■如何充分利用寄存器一做到 ◆尽可能地让变量(存结果)的值保留在寄存器中 ·尽可能引用变量(操作数)在寄存器中的值,直到 该寄存器必须用来存放别的变量值或者已到达基本 块出口为止 ■为了生成高效的目标代码,充分利用寄存器, 代码生成器需要了解如下信息 ◆哪些变量以后还会被引用—待用信息 ◆变量的值当前在何处一寄存器描述和地址描述 2025/4/2 国 6/16

2025/4/2 概述 p283 ◼ 算法策略 ◆ 依次把每条中间代码变换成目标代码 ◆ 在一个基本块范围内充分利用寄存器 ◼ 如何充分利用寄存器——做到 ◆ 尽可能地让变量(存结果)的值保留在寄存器中 ◆ 尽可能引用变量(操作数)在寄存器中的值,直到 该寄存器必须用来存放别的变量值或者已到达基本 块出口为止 ◼ 为了生成高效的目标代码,充分利用寄存器, 代码生成器需要了解如下信息 ◆ 哪些变量以后还会被引用——待用信息 ◆ 变量的值当前在何处——寄存器描述和地址描述 6/16

目 三地址代码 目标代码 寄存器描述 地址描述 标 (1)T1:=A+B LD Ro,A 代 Ro空闲 ADD Ro,B Ro含T1 T1在R0 2T2:=T1-C LD R1 Ro Ro含T1lRo,R1 T1在Ro R1空闲 生 SUB R1,C R1含T2均非空 T2在R1 (3)T3:=D+E ST Ro T1 R0T1存入内存 T1在T1 Ro 举 LD Ro,D R1含T2 T2在R1T2以后 T1最远用到 ADD Ro,E Ro含T3 不用 例 T3在R (4)T3:T2*T3R1 MUL R1,Ro R1含T3 T3在RT1在T1 (5)T4:红4T3 LD Ro,T1 R1含T3 T3在R1T3以后 RoT1存入R0 ADD Ro,R1 R0含T4 T4在R0不用 (6)T5:=T3-ER1 SUB R1,E R1含T5R0含T4 T5在R1T4在R0 (7)F:=T4*T5 MUL Ro,Ri T4以后 RoF存内存 ST Ro,F Ro含F F在RO,F 不用 假设只有R0,R1两个寄存器可用,出口处只有F活跃 2025/4/2 节目录国 7/16

2025/4/2 目 标 代 码 生 成 举 例 三地址代码 (1)T1:=A+B (2)T2:=T1-C (3)T3:=D+E (4)T3:=T2*T3 (5)T4:=T1+T3 (6)T5:=T3-E (7)F:=T4*T5 目标代码 寄存器描述 地址描述 假设只有R0 ,R1两个寄存器可用 R0空闲 LD R0 ,A ADD R0 ,B R0含T1 T1在R0 R1空闲 LD R1 ,R0 SUB R1 ,C R0含T1 R1含T2 T1在R0 T2在R1 R0,R1 均非空 R0 T1最远用到 ST R0 ,T1 R0 T1存入内存 LD R0 ,D ADD R0 ,E R1含T2 R0含T3 T1在T1 T2在R1 T3在R0 T2以后 不用 R1 MUL R1 ,R0 R1含T3 T3在R1 T1在T1 R0 LD R0 ,T1 ADD R0 ,R1 R1含T3 R0含T4 T3在R1 T4在R0 R1 SUB R1 ,E R1含T5 R0含T4 T5在R1 T4在R0 T3以后 T1存入R0 不用 T4以后 R0 不用 MUL R0 ,R1 ,出口处只有F活跃 F存内存 ST R0,F R0含F F在R0,F 节目录 7/16

寄存器描述 p283 寄存器描述 ◆目的 动态地记录各寄存器分配信息 ◆内容描述每个寄存器当前的状况 空闲 已分配某个变量 已分配给某些变量 ◆数据结构 数组 Ro R1 R7 RVALUE 空闲 B D,Ti 举例 ◆RVALUE[Ro]={} 寄存器Ro空闲 ◆RVALUE[R]={B}—R1中持有B的值 ◆RVALUE[R]={D,T1}—R7中持有D,T1的值 2025/4/2 D 8/16

2025/4/2 寄存器描述 p283 ◼ 寄存器描述 ◆目的 动态地记录各寄存器分配信息 ◆内容 描述每个寄存器当前的状况 空闲 已分配某个变量 已分配给某些变量 ◆数据结构 数组 RVALUE . R0 R1 . R7 ◼ 举例 ◆RVALUE[R0]={ }——寄存器R0空闲 空闲 ◆RVALUE[R1]={B}——R1中持有B的值 B ◆RVALUE[R7]={D,T1}——R7中持有D,T1的值 D,T1 8/16

地址描述 p283 ■地址描述 ◆目的动态地记录各变量现行值的存放位置 ◆内容描述每个变量现行值所在位置状况 ▣只在寄存器只在内存 同时在寄存器和内存 ◆数据结构 数组 B C Ti AVALUE R1 . R7,T1 ■举例 0 AVALUE[B]={R1}—变量B的值在寄存器R1中 0 AVALUE[C]={C}—变量C的值在内存单元C中 AVALUE[T1]=(R7,T1}- 变量T的值在寄存器R7 和内存单元T1中 2025/4/2 <D 9116

2025/4/2 地址描述 p283 ◼ 地址描述 ◆目的 动态地记录各变量现行值的存放位置 ◆内容 描述每个变量现行值所在位置状况 只在寄存器 只在内存 同时在寄存器和内存 ◆数据结构 数组 AVALUE . B C . T1 ◼ 举例 AVALUE[B]={R1}——变量B的值在寄存器R1中 R1 AVALUE[C]={C}——变量C的值在内存单元C中 C AVALUE[T1]={R7,T1}——变量T1的值在寄存器R7 和内存单元T1中 R7,T1 9/16

函数getreg(i:A:=BopC)p284 飞存结 自 参数待翻译的中间代码i:A:=BopC ■于 功能给出一个用来存放A的当前值的寄存器R ■算法 ◆(I)若RVALUE[R]={B},即B的现行值在某寄存器中, 且B=A或B在1后不活跃,则令R=R1,并转(4) ◆(2)否则,若RVALUE[R:]={},则令R=R,并转(4) ◆(3)否则,选一个已用R,最好使R中变量满足: 加占用该寄存器的变量值同时也在内存单元中 或者,在块中要最远引用或不会引用 则令R=R1,然后修改相应的寄存器和地址描述符 2025/4/2 210/16

2025/4/2 函数getreg(i:A:=B op C)p284 ◼ 参数 待翻译的中间代码 i:A:=B op C ◼ 功能 给出一个用来存放A的当前值的寄存器R 存结 果 ◼ 算法 ◆(1)若RVALUE[Ri]={B},即B的现行值在某寄存器中, 且B=A或B在i后不活跃,则令R=Ri,并转(4) ◆(2)否则,若RVALUE[Ri]={ },则令R=Ri,并转(4) ◆(3)否则,选一个已用Ri,最好使Ri中变量满足: 占用该寄存器的变量值同时也在内存单元中 或者,在块中要最远引用或不会引用 则令R=Ri,然后修改相应的寄存器和地址描述符 10/16

共16页,试读结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档