- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理实践及应用》PPT教学课件-第8章 代码生成
第八章 代码生成 本章要求 主要内容:目标代码生成的任务,设计目标代码生成器需要考虑的主要问题,简单的代码生成器,Sample语言目标代码生成器的设计 重点掌握:代码生成要考虑的主要问题,寄存器的分配,基本块的代码生成,以及从DAG生成代码 代码生成器的作用 各种代码的形式 中间代码: 后缀式,三地址代码,四元式 符号表中的项:名字,类型,嵌套深度,偏移量 目标代码:绝对机器代码,可重定位代码,汇编 代码生成器的输出必须是正确和高质量的 产生最优化代码的问题是不可判定的 8.2 代码生成器设计中的问题 代码生成器依赖于目标机器和操作系统 要充分发挥目标机器的能力:充分利用目标机器的资源 代码生成器固有的问题 存储管理 指令选择 寄存器分配 计算次序选择 可移植的代码生成器 机器描述 代码生成器的输入 符号表信息 决定中间代码中名字所代表的数据对象的运行地址 偏移量 作用域 可能在动态时刻作为调试信息存在 中间代码 代码生成的很多技术是可以用于不同的中间代码 代码生成前,中间代码记录了足够详细的程序信息 名字的值可以表示为目标机器能够直接操作的数 类型检查已经完成 明显的语义错误已经发现 代码生成器的输出:目标程序 绝对机器语言 可以放在内存中固定地方,并立即执行 小程序、需要迅速编译和执行 可重定位的机器语言 程序可以分为多个目标模块,分别编译 需要连接装配器将一组可重定位模块一起装入执行 需要额外的开销,但灵活:可分别编译子程序和从目标模块中调用其它先前编译好的程序模块 如果目标机器不能自动处理重定位,则编译器必须提供显式的重定位信息给装配程序 汇编语言 代码生成的过程容易 避免了重复汇编器的工作 存储管理 把程序中的名字映射到运行时的目标对象的地址是由前端和代码生成器共同完成的 语言中过程的语义决定了运行时刻名字如何与存储空间相联系 对名字的引用通过符号表 记录了名字在过程数据区的相对地址 所需要的存储空间 运行时活动记录的管理 运行时活动记录的分配和释放作为过程调用和返回序列的一部分 call(调用),return(返回) halt(暂停),其它语句 存储管理分静态、栈式和堆式存储分配 一个代码生成器的输入 其中,arr,i,j是过程s中定义的数据;buf和n是过程p定义的数据 指令地址的决定 通过一个计数器决定每个指令的地址 标号的处理:j: goto i /*j是当前语句的号码*/ 如果i小于j i出现在j之前,目标地址是i对应的三地址代码的第一条指令地址 如果i大于j i出现在j之后,目标地址此时不可知,可以利用回填的技术解决 指令选择 目标机器指令系统的性质决定了指令选择的难易程度 指令系统的一致性和完整性是重要因素 如果目标机器不能以一致的方式支持各种数据类型,则每种例外都要专门的处理 指令的速度和机器的特点是另一些重要的因素 如果不考虑目标程序的效率,则指令选择是直截了当的 代码的质量取决于它的执行速度和长度 可以从多种指令中选择合适的:a=a+1 MOV a , R0 ADD #1 , R0 INC a MOV R0 , a 时间信息对代码序列是重要的,但不是任何时候都精确的 指令选择的例子 逐条语句地产生代码的方法常常产生低质量的代码 寄存器分配 利用寄存器放置运算对象的指令比运算对象在内存中的指令短些 执行也快些 充分利用寄存器对高质量的代码生成是重要的 寄存器分配(续) 寄存器使用的两个子问题 寄存器分配:为程序的某一点选择驻留在寄存器中的一组变量 寄存器指派:挑出变量将要驻留的具体寄存器 寄存器分配的最优化是NP完全的 特定要求的满足 计算次序选择 计算执行的次序会影响目标代码的效率 选择最佳次序是一个NP完全问题 MOV R1 , A MOV R1 , A ADD R1 , R0 MUL R2 , R3 MUL R2 , R3 ADD R1 , R0 ADD R1 , R2 ADD R1 , R2 代码生成的途径 代码生成器的目的 正确的代码:最重要的目标 易于实现、调试和维护 代码生成需要多方面的信息 流信息 依赖信息 … … 代码生成的可移植性也是要考虑的一个问题 将机器相关部分和不相关部分区分开 8.3 目标机器 熟悉目标机器和它的指令系统 是设计一个好的代码生成器的先决条件 但不存在通用的有效的机器描述 目标机器 字节可寻址机器,4字节为一个字 有n个通用寄存器R0 , R1 , … , R(n-1) 指令形式: 目标机器的地址方式 指令代价 如果把指令代价取成1,加上上述的地址模式的附加代价,就是对应指令的长度(以字计算) 寄存器地址模式的代价为0 含内存单元和常量的地址模式的代价是1,因为这种运算对象必须和指令存在一起 如果空间至关重要,则应使指令
您可能关注的文档
- 化工分离过程第七章 其它分离技术和分离过程的选择.ppt
- 化工原理-干燥技术.ppt
- 化学实验安全操作.pdf
- 化工原理多媒体课件1.ppt
- 化工建设项目安全设计管理导则》培训教材04、05.ppt
- 化工板块HSE体系建设的回顾和打算.ppt
- 化工板块上市以来事故分析与对策1压制.ppt
- 化工工艺学-纯碱和烧碱.ppt
- 化妆品的制作.ppt
- 化工单元操作过程-气体输送机械 (NXPowerLite).ppt
- 东海证券-轮胎行业月报:2024年高景气收官,节后开工恢复性提升.pdf
- 东吴证券-环保行业跟踪周报:欧盟终裁略下调对华生柴反倾销关税,开始跟踪SAF进口,持续推荐现金流资产.pdf
- 北京博观众智信息科技-日本保健品行业繁荣发展的背后及发展现状.pdf
- 兴业证券-电力设备行业深度报告:机器人业务打开锂电精密加工企业成长空间.pdf
- 信达证券-航空运输月度专题:1月油汇向好、国内线运力同比微增,客座率高位维稳.pdf
- 兴业证券-德昌股份-605555-家电汽零双轮驱动,多元布局兑现高成长.pdf
- 东吴证券-九方智投控股-09636.HK-基本面夯实乘A股东风,AI赋能拓成长蓝海.pdf
- 民生证券-计算机行业深度报告:DeepSeek系列报告之AI+医疗.pdf
- 兴业证券-基础化工行业周报:国常会研究提振消费及化解重点产业结构性矛盾继续关注化工核心资产及新材料成长.pdf
- 国金证券-A股投资策略周报:港股“狂飙”背后:哪些驱动因子与A股不一样?.pdf
最近下载
- 铁血丹心-钢琴谱 高清正版完整版五线谱.pdf
- SPC地板现状研究分析与发展前景预测报告2024年.docx VIP
- 以中国式现代化全面推进中华民族伟大复兴(ppt)(1).PPTX VIP
- (苏教版)三年级下册综合实践第三单元电子教案.pdf VIP
- 幼儿园小班主题我爱我家.pdf VIP
- 品管圈PDCA获奖案例-心血管内科降低经皮冠状动脉介入术后肢体肿胀发生率医院品质管理成果汇报.pptx
- 提高容积率的申请报告.doc
- 2024 年度民主生活会“四个对照”方面(存在问题、原因剖析及整改措施).docx VIP
- GB41022-2021 煤矿瓦斯抽采基本指标.pdf
- 2025年无锡工艺职业技术学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
文档评论(0)