《编译原理》课程教学课件(2023讲稿)cha10_2 代码生成 讲授

第10章(2)代码生成 n目标机器模型 n一个简单的代码生成器 n作业 2023/2/28 课程目绿☒m
2023/2/28 第10章 (2) 代码生成 n 目标机器模型 n 一个简单的代码生成器 n 作业 课程目录 1/11

代码生成概述p279 n逻辑阶段编译程序的最后一个阶段 n输入和输出中间代码 等价的目标代码 n目标代码的一般形式 u汇编语言代码 F优点:目标程序好读、可移植 F缺点:需经汇编器辅助代码生成 n代码生成器的设计环境 U要依赖于目标机器、指令系统和操作系统。 2023/2/28 国D21
2023/2/28 代码生成概述 p279 n 逻辑阶段 编译程序的最后一个阶段 n 输入和输出 中间代码 等价的目标代码 n 目标代码的一般形式 u 汇编语言代码 F 优点:目标程序好读、可移植 F 缺点:需经汇编器辅助代码生成 n 代码生成器的设计环境 u 要依赖于目标机器、指令系统和操作系统。 2/11

目标代码生成器的基本设计要求 n目标代码尽可能的短 n充分地发挥目标机可用资源效率 例如: u尽可能地使用执行速度快的指令 u充分利用寄存器和变址器,以节省访 问内存的时间 2023/2/28
2023/2/28 目标代码生成器的基本设计要求 n 目标代码尽可能的短 n 充分地发挥目标机可用资源效率 例如: u 尽可能地使用执行速度快的指令 u 充分利用寄存器和变址器,以节省访 问内存的时间 3/11

目标机模型 假想的计算机模型 p280 n常备指令 arc—源操作数 dst一目的操作数 指令形式 意义 举例 LD dst,arc (arc)☐dst LDR1,B(B)口R1取数 MOVE LD R1,#11 R ST arc,dst (arc)口dst STR1,B(R1)口B存数 ADD dst,arc (dst)+(arc)☐dst ADD R1,Ro(R)+(Ro)☐R SUB dst,arc (dst)-(arc)dst SUB R1,T1 (R1)-(T1)Ri MUL dst,arc (dst)米(arc)口dst MUL R1,D(R)*(D)☐R DIV dst,arc (dst)/(arc)dst DIV R1,A (Ri)/(A)R ●●●●●● ●●●●●● ●●●●●● 2023/2/28 国D4m
2023/2/28 目标机模型 假想的计算机模型 p280 n 常备指令 arc—源操作数 dst—目的操作数 指令形式 意 义 举 例 LD dst,arc (arc) dst LD R1,B (B) R1 取数 MOVE LD R1,#1 1 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/11

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

目 三地址代码 目标代码 寄存器描述 地址描述 标 (1)T1:=A+B LD Ro,A 代 R空闲 ADD Ro,B Ro含T1 T1在R0 ②T2:=T1-C LD R1,Ro Ro含T1 Ro2 R1 T1在R, 生 R1空闲 SUB R1,C R1含T2均非空 T2在R1 成 (③)T3:=D+E ST Ro,Ti R0T1存入内存 T1在T1 Ro 举 LD Ro,D R含T2 T2在R1T2以后 T最远用到 ADD Ro,E Ro含T3 T3在RO 不用 例 (④T3:①2yT3R MUL R1,Ro R1含T3 I3在RT在T (⑤)T4:T3 LD Ro,T1 R1含T3 T3在R1T3以后 RoT存入Ro ADD Ro,R1 Ro含T4 T4在Ro 不用 (6)T5:=T3-ER1 SUB R1,E R1含T5R含T4 T5在R1T4在Ro (⑦)F:=T4*T5 MUL Ro,Ri T4以后 RoF存内存 ST Ro,F Ro含F F在RO,F 不用 假设只有Ro,R1两个寄存器可用,出口处只有F活跃 2023/2/28 D61
2023/2/28 目 标 代 码 生 成 举 例 三地址代码 (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 6/11

寄存器描述 p283 n寄存器描述 u目的动态地记录各寄存器分配信息 u内容描述每个寄存器当前的状况 F空闲已分配某个变量 已分配给某些变量 u数据结构 数组 Ro R1 R RVALUE 空闲 D,T1 n举例 u RVALUE[Ro]={}—寄存器R空闲 u RVALUE[R]={B}—R1中持有B的值 u RVALUE[R]={D,T}—R7中持有D,T的值 2023/2/28 ☒27m
2023/2/28 寄存器描述 p283 n 寄存器描述 u 目的 动态地记录各寄存器分配信息 u 内容 描述每个寄存器当前的状况 F 空闲 已分配某个变量 已分配给某些变量 u 数据结构 数组 RVALUE . R0 R1 . R7 n 举例 u RVALUE[R0]={ }——寄存器R0空闲 空闲 u RVALUE[R1]={B}——R1中持有B的值 B u RVALUE[R7]={D,T1}——R7中持有D,T1的值 D,T1 7/11

地址描述 p283 n地址描述 u目的动态地记录各变量现行值的存放位置 u内容描述每个变量现行值所在位置状况 F只在寄存器只在内存 同时在寄存器和内存 u数据结构数组 B C Tu AVALUE R1 R7,T1 n举例 u AVALUE[B]={R}—变量B的值在寄存器R1中 u AVALUE[C]={C一变量C的值在内存单元C中 u AVALUE[T]={R,T}一变量T的值在寄存器R7 和内存单元T中 2023/2/28 D81
2023/2/28 地址描述 p283 n 地址描述 u 目的 动态地记录各变量现行值的存放位置 u 内容 描述每个变量现行值所在位置状况 F 只在寄存器 只在内存 同时在寄存器和内存 u 数据结构 数组 AVALUE . B C . T1 n 举例 u AVALUE[B]={R1}——变量B的值在寄存器R1中 R1 u AVALUE[C]={C}——变量C的值在内存单元C中 C u AVALUE[T1]={R7,T1}——变量T1的值在寄存器R7 和内存单元T1中 R7,T1 8/11

目标代码简单生成算法使用举例 三地址代码 目标代码 寄存器描述 地址描述 (1)T:=A-B LD Ro,A RO空闲 SUB Ro,B R含T T在R, (②U:=A-C LD R1,A R含T Ro,R1 T在R,T以后 R1空闲 SUB R1,C R含U 均非空 U在R1 不用 (3)V:=T+U ADD Ro,R1 R1含U U在R1 V以后 RT不活跃 Ro含V V在RO 不用 (4)W:=V+U ADD Ro, Ro W存内存 ST Ro,W Ro含W W在Ro,W 假设只有Ro,R1两个寄存器可用,出口处只有W活跃 2023/2/28
2023/2/28 目标代码简单生成算法使用举例 三地址代码 (1)T:=A-B (2)U:=A-C (3)V:=T+U (4)W:=V+U 目标代码 寄存器描述 地址描述 假设只有R0 ,R1两个寄存器可用,出口处只有W活跃 R0空闲 LD R0 ,A SUB R0 ,B R0含T T在R0 R1空闲 LD R1 ,A SUB R1 ,C R0含T R1含U T在R0 U在R1 R0,R1 均非空 R0 T不活跃 ADD R0 , R1 R1含U R0含V U在R1 V在R0 T以后 不用 ADD R0 , R1 R0 W存内存 ST R0,W R0含W W在R0,W V以后 不用 9/11

目标代码简单生成算法课堂练习 例:赋值语句T4:=A+B-(E-(C+D)) BEGIN 三地址代码 且标代码 寄存器描述 地址描述 (1)T1:=A+B (1)LD Ro,A Ro空闲 (2)ADD Ro,B Ro含T1 T1在R0 2T2:=C+D (3)LD R1,C Ro含T1Ro,R1 T1在R0 R1空闲 (4)ADD R1,D R1含T2均非空 T2在R1 (③)T3=E2 (5)ST Ro,T1 T存入内在 Ro (6)LD Ro,E R1含T2 T2在R1T2以后 T1最远用到 (7)SUB Ro,R1 Ro含T3 T3在R 不用 ④T4:T (8)LD RL,T1 取T存入R 是否可优化? (9)SUB R1,Ro T4存入内存 10)STR1,T4 R1含T4 T4在R1,T4 假设只有R0,R1两个寄存器可用,出口处只有T4活跃 请给出目标代码及生成过程中寄存器和地址描述 2023/2/28 10/11
2023/2/28 目标代码简单生成算法课堂练习 三地址代码 (1)T1:=A+B (2)T2:=C+D (3)T3:=E-T2 (4)T4:=T1-T3 目标代码 寄存器描述 地址描述 假设只有R0 ,R1两个寄存器可用,出口处只有T4活跃 请给出目标代码及生成过程中寄存器和地址描述 R0空闲 (1)LD R0 ,A (2)ADD R0,B R0含T1 T1在R0 R1空闲 (3)LD R1 ,C (4)ADD R1,D R0含T1 R1含T2 T1在R0 T2在R1 R0,R1 均非空 R0 T1最远用到 (5)ST R0 ,T1 (6)LD R0 ,E (7)SUB R0,R1 R1含T2 R0含T3 T2在R1 T3在R0 T1存入内存 R1 (9)SUB R1,R0 (10)ST R1,T4 T4存入内存 R1含T4 T4在R1,T4 T2以后 不用 (8)LD R1 ,T1 取T1存入R1 例:赋值语句T4:=A+B-(E-(C+D)) 是否可优化? BEGIN 10/11
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《编译原理》课程教学课件(2023讲稿)cha10_1 代码优化 阅读(含局部循环优化举例&基本块流图&DAG构造算法).pdf
- 《编译原理》课程教学课件(2023讲稿)cha10_1 代码优化 讲授.pdf
- 《编译原理》课程教学课件(2023讲稿)cha09 运行时存储组织 阅读(含 嵌套过程定义中的非局部量访问 display表).pdf
- 《编译原理》课程教学课件(2023讲稿)cha09 运行时存储组织 讲授.pdf
- 《编译原理》课程教学课件(2023讲稿)cha07-08 02 语法制导翻译和中间代码生成(补充 说明语句).pdf
- 《编译原理》课程教学课件(2023讲稿)cha07-08 01 语法制导翻译和中间代码生成.pdf
- 《编译原理》课程教学课件(2023讲稿)cha06 LR分析 1.pdf
- 《编译原理》课程教学课件(2023讲稿)cha05 自底而上语法分析.pdf
- 《编译原理》课程教学课件(2023讲稿)cha04 自顶向下语法分析方法.pdf
- 《编译原理》课程教学课件(2023讲稿)cha04 自顶向下语法分析方法 讲授.pdf
- 《编译原理》课程教学课件(2023讲稿)cha03 词法分析.pdf
- 《编译原理》课程教学课件(2023讲稿)cha03 词法分析(NFA确定化最小化DFA).pdf
- 《编译原理》课程教学课件(2023讲稿)cha02-2 文法和语言_短语直接短语句柄.pdf
- 《编译原理》课程教学课件(2023讲稿)cha02-1 文法和语言——阅读.pdf
- 《编译原理》课程教学课件(2023讲稿)cha02-1 文法和语言.pdf
- 《编译原理》课程教学课件(2023讲稿)cha01 引论.pdf
- 《计算机网络》课程教学资源(PPT课件)第一章 概述.ppt
- 《计算机网络》课程教学资源(PPT课件)第二章 物理层.ppt
- 《计算机网络》课程教学资源(PPT课件)第三章 数据链路层.ppt
- 《计算机网络》课程教学资源(PPT课件)第四章 网络层.ppt
- 《编译原理》课程教学课件(2023讲稿)cha10_2 代码生成_阅读(含生成算法简介).pdf
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第1-2章 计算机与计算思维_第2章 计算思维.ppt
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第1-2章 计算机与计算思维_第1章 计算机与计算.ppt
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第5-6章 办公自动化 与 数据库_第6章数据库.ppt
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第7-8章 网络基础 与 网页设计_第8章 网页设计.ppt
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第9-10章 算法 与 程序设计_2019第九章 算法最新版.ppt
- 《计算机应用基础》课程教学资源(讲义)第九章 算法.doc
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第9-10章 算法 与 程序设计_第10章 VB常用控件.ppt
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第10-11章 计算机学科简介 与 前沿_第12章 计算机学科前沿.ppt
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第10-11章 计算机学科简介 与 前沿_第11章 计算机学科简介.ppt
- 《计算机应用基础》课程教学资源(推荐书籍)思考的乐趣.pdf
- 《计算机应用基础》课程教学资源(推荐书籍)奇思妙想——15位计算机天才及其重大发现.pdf
- 《计算机应用基础》课程教学资源(推荐书籍)改变未来的九大算法[美]约翰·麦考密克(John MacCormick).pdf
- 《计算机应用基础》课程教学资源(扩展阅读)Access 2010简介.doc
- 《计算机应用基础》课程教学资源(扩展阅读)常用鼠标类型介绍.doc
- 《计算机应用基础》课程教学资源(扩展阅读)Windows诞生始末.doc
- 《计算机应用基础》课程教学资源(扩展阅读)Word、Excel、PowerPoint 操作要求及步骤.doc
- 《计算机应用基础》课程教学资源(PPT课件讲稿)第九章 算法.ppt
- 《计算机应用基础》课程教学资源(PPT课件讲稿)html课件.ppt
- 《计算机应用基础》课程教学资源(PPT课件讲稿)数据库.ppt
