《编译原理》课程教学课件(PPT讲稿,2022)ch10-目标代码生成

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

代码生成概述 ■逻辑阶段 编译程序的最后一个阶段 ■输入和输出中间代码 等价的目标代码 ■目标代码的一般形式 ◆绝对机器代码所有地址均已定位 优点:可立即执行 ·缺点:不能独立编译各模块,灵活性差 ◆可再定位机器代码需经连接与装入才可执行 ▣优点:子程序可单独编译 口缺点:需经汇编器辅助代码生成 ◆汇编语言代码 口优点:目标程序好读、可移植 口缺点:需经汇编器辅助代码生成 2025/4/3 D2
2025/4/3 2 代码生成概述 ◼ 逻辑阶段 编译程序的最后一个阶段 ◼ 输入和输出 中间代码 等价的目标代码 ◼ 目标代码的一般形式 ◆绝对机器代码 所有地址均已定位 优点:可立即执行 缺点:不能独立编译各模块,灵活性差 ◆可再定位机器代码 需经连接与装入才可执行 优点:子程序可单独编译 缺点:需经汇编器辅助代码生成 ◆汇编语言代码 优点:目标程序好读、可移植 缺点:需经汇编器辅助代码生成

基本问题 ■代码生成器的设计环境 ◆要依赖于目标机器、指令系统和操作系统。 ■输入 ◆源程序的中间表示、符号表中的信息。 ■ 目标程序 ◆汇编语言。 ■指令选择 ◆指令集丰富、选择合适。 寄存器分配 ◆有效合理使用寄存器、提高代码质量。 ■计算顺序选择 ◆影响代码的有效性。 2025/4/3 ☒3
2025/4/3 3 基本问题 ◼ 代码生成器的设计环境 ◆要依赖于目标机器、指令系统和操作系统。 ◼ 输入 ◆源程序的中间表示、符号表中的信息。 ◼ 目标程序 ◆汇编语言。 ◼ 指令选择 ◆指令集丰富、选择合适。 ◼ 寄存器分配 ◆有效合理使用寄存器、提高代码质量。 ◼ 计算顺序选择 ◆影响代码的有效性

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

目标机模型 ■问题提出 ◆代码生成程序总是针对某一具体的计算机实现的 ◆因此,试图脱离具体的计算机来一般性讨论生成高 效的目标代码的全部细节是不合适的,也是不可行 的 ◆然而又不可能只局限于某一特定的计算机 ■折中方案 ◆定义一种假想的计算机模型,具有实际计算机的 共同特征 ◆依此模型为依据,讨论代码生成中的某些主要问题 2025/4/3 国5
2025/4/3 5 目标机模型 ◼ 问题提出 ◆代码生成程序总是针对某一具体的计算机实现的 ◆因此,试图脱离具体的计算机来一般性讨论生成高 效的目标代码的全部细节是不合适的,也是不可行 的 ◆然而又不可能只局限于某一特定的计算机 ◼ 折中方案 ◆定义一种假想的计算机模型,具有实际计算机的 共同特征 ◆依此模型为依据,讨论代码生成中的某些主要问题

目标机模型 ■指令形式(寻址方式) (R)一通用寄存器R:中的内容 (M)一内存单元M中的内容 类型 指令形式 意义(设op是二目运算符) 直接地址型 op Ri,M (Ri)op(M)→Ri 寄存器型 op Ri,Rj (Ri)op(R)→Ri 变址型 op Ri,c(Rj) (Ri)op(R)+c)→Ri 间接型 op Ri,*M (Ri)op(M)→R op Ri,*Rj (R)op(R)→R1 op Ri,*c(Ri) (Ri)op((R)+c)→R 直接操作数型 op Ri,#X (Ri)opX→Ri 2025/4/3 国D6
2025/4/3 6 目标机模型 ◼ 指令形式(寻址方式) (Ri)—通用寄存器Ri中的内容 (M)—内存单元M中的内容 类 型 指令形式 意义(设op是二目运算符) 直接地址型 op Ri,M (Ri)op(M)Ri 寄存器型 op Ri,Rj (Ri)op(Rj)Ri 变址型 op Ri,c(Rj) (Ri)op((Rj)+c)Ri 间接型 op Ri,*M (Ri)op((M))Ri op Ri,*Rj (Ri)op((Rj))Ri op Ri,*c(Rj) (Ri)op(((Rj)+c))Ri 直接操作数型 op Ri,#X (Ri)op X Ri

目标机模型 ■常备指令arc一源操作数 dst一目的操作数 指令形式 意义 举 例 LD dst,arc (arc)→dst LDR1,B(B)→R1 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)→Ra MUL dst,arc (dst)*(arc)→dst MULR1,D(R1)*(D)→R1 DIV dst,arc (dst)/(arc)→dst DIV R1,A(R1)/(A)→R1 2025/4/3 章节目录国)
2025/4/3 7 目标机模型 ◼ 常备指令 arc—源操作数 dst—目的操作数 指令形式 意 义 举 例 LD dst,arc (arc)dst LD R1,B (B)R1 LD R1,#1 1R1 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 章节目录

执行代价 ■ 衡量目标程序工作效率的指标 ◆目标程序的长短 ◆目标程序的执行时间—取决于访问内存的次数 ■一条指令执行代价 ◆定义:执行该指令所需访问内存的总次数 ◆值=该指令访问内存的次数+1(取指令访问一次内存) ■目标程序的执行代价 ◆定义:各条指令执行代价总和 ◆特点:该值越低目标程序的执行效率越高 产生目标代码时,应尽可能选用执行代价较小的指令 2025/4/3
2025/4/3 8 执行代价 ◼ 衡量目标程序工作效率的指标 ◆目标程序的长短 ◆目标程序的执行时间——取决于访问内存的次数 ◼ 一条指令执行代价 ◆定义:执行该指令所需访问内存的总次数 ◆值=该指令访问内存的次数+1(取指令访问一次内存) ◼ 目标程序的执行代价 ◆定义:各条指令执行代价总和 ◆特点:该值越低目标程序的执行效率越高 产生目标代码时,应尽可能选用执行代价较小的指令

执行代价举例 ■对三地址代码A:=B+C 指令 执行代价 ■若B,C分别在Ro,R1,且B值 以后不用,则 ■LDRo,R1 (0+1) 1 (1)ADD Ro,R1 (0+1) 1 ■LD R1,M (1+1) 2 若B在Ro,C在内存,且B值 ■STR1,T1 (1+1) 2 以后不用,则 ■ADDR1,#1 (1+1) 2 (2)ADD Ro,C (1+1)2 ■ADD Ro,米R1 (1+1) 2 或(3)LDR1,C ■LDRo,*M (2+1) 3 ADD Ro,R1 (1+2) 3 ■第(3)种特别适合于C值在块内还要被引用的情况, 虽然它的执行代价比前两种形式都高,但由于以 后可从寄存器中取得C值,故从总程序的执行代价 上看,仍是合算的 2025/4/3 章节目录冈区
2025/4/3 9 执行代价举例 ◼ 指令 执行代价 ◼ LD R0,R1 (0+1) 1 ◼ LD R1,M (1+1) 2 ◼ ST R1,T1 (1+1) 2 ◼ ADD R1,#1 (1+1) 2 ◼ ADD R0,*R1 (1+1) 2 ◼ LD R0,*M (2+1) 3 ◼ 对三地址代码A:=B+C ◼ 若B,C分别在R0,R1,且B值 以后不用,则 (1)ADD R0,R1 (0+1) 1 ◼ 若B在R0,C在内存,且B值 以后不用,则 (2)ADD R0,C (1+1) 2 或(3)LD R1,C ADD R0,R1 (1+2) 3 ◼ 第(3)种特别适合于C值在块内还要被引用的情况, 虽然它的执行代价比前两种形式都高,但由于以 后可从寄存器中取得C值,故从总程序的执行代价 上看,仍是合算的 章节目录

一个简单的代码生成器 概述 ■待用信息(略) 寄存器描述和地址描述 简单代码生成算法 2025/4/3 章节目录国回0
2025/4/3 10 一个简单的代码生成器 ◼概述 ◼待用信息(略) ◼寄存器描述和地址描述 ◼简单代码生成算法 章节目录
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《编译原理》课程教学课件(PPT讲稿)第六章 自顶向下语法分析.ppt
- 《编译原理》课程教学课件(PPT讲稿)chap1 引论 Principles of Compiler.ppt
- 《编译原理》课程教学课件(PPT讲稿)第四章 自顶向下语法分析.ppt
- 《JAVA语言程序设计》课程教学课件(PPT讲稿)第10章 多线程.ppt
- 《JAVA语言程序设计》课程教学课件(PPT讲稿)第6章 集合.ppt
- 《C语言》课程教学资源_第01章 引论.ppt
- 《C语言》课程教学资源_第00章 课前准备.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)前言(JAVA).ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第一章 java描述.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第二章 线性表.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第三章 栈和队列.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第四章 串.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第五章 数组与广义表.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第六章 树与二叉树.ppt
- 《数据结构与算法分析》课程教学课件(PPT讲稿)第七章 图.ppt
- 《数据结构与算法分析》课程教学资源(书籍文献)数据结构与算法分析.pdf
- 《计算机网络》课程课后习题答案(参考).doc
- 《计算机网络》课程教学资源(PPT课件讲稿)第一章 概述.ppt
- 《计算机网络》课程教学资源(PPT课件讲稿)第二章 物理层.ppt
- 《计算机网络》课程教学资源(PPT课件讲稿)第三章 链路层.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch10-代码优化.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch9-目标程序运行时的存储组织.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch7-8-语法制导翻译和中间代码生成2/2.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch7-8-语法制导翻译和中间代码生成1/2.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch6-LR分析.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch4-自顶而下语法分析方法.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch3-词法.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch2-文法和语言.ppt
- 《编译原理》课程教学课件(PPT讲稿,2022)ch1-引论 Principles of Compiler.ppt
- 《编译原理》课程教学资源(教材和参考书)编译原理-陈火旺-第3版.pdf
- 《编译原理》课程教学资源(教材和参考书)编译原理-清华张素琴-第2版.pdf
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第六章 分支限界法 Branch-and-Bound Algorithm.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第五章 回溯算法 Backtrack Algorithm.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第四章 贪心算法 Greedy Algorithm.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第三章 动态规划 Dynamic Programming.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第二章 分治与递归.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第一章 算法概述概述(主讲:王红霞).ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)第零章 算法课程简介 Design and Analysis of Computer Algorithms.ppt
- 山东理工大学:《计算机算法设计与分析》课程教学课件(PPT讲稿)哈夫曼编码 Huffman Coding.ppt
- 《计算机网络》课程教学资源(PPT课件)第九章 无线网络和移动网络.ppt
