[计算机软件及应用]第8章 代码生成.pptVIP

  • 4
  • 0
  • 约1.07万字
  • 约 63页
  • 2018-03-04 发布于浙江
  • 举报
[计算机软件及应用]第8章 代码生成

中国科大 第八章 代 码 生 成 本章内容 一个简单的代码生成算法 涉及存储管理,指令选择,寄存器分配和计算次序选择等基本问题 8.1 代码生成器的设计中的问题 8.1.1 目标程序 绝对机器语言程序 目标程序将装入到内存的固定地方 粗略地说,相当于现在的可执行目标模块(第11章介绍) 可重定位目标模块 代码中含重定位信息,以适应重定位要求 8.1 代码生成器的设计中的问题 8.1.1 目标程序 可重定位目标模块 .L7: testl %eax,%eax je .L3 testl %edx,%edx je .L7 movl %edx,%eax jmp .L7 .L3: leave ret 8.1 代码生成器的设计中的问题 8.1.1 目标程序 绝对机器语言程序 目标程序将装入到内存的固定地方 粗略地说,相当于现在的可执行目标模块(第11章介绍) 可重定位目标模块 代码中含重定位信息,以适应重定位要求 允许程序模块分别编译 调用其它先前编译好的程序模块 8.1 代码生成器的设计中的问题 8.1.1 目标程序 绝对机器语言程序 可重定位目标模块 代码中含重定位信息,以适应重定位要求 允许程序模块分别编译 调用其它先前编译好的程序模块 汇编语言程序 免去编译器重复汇编器的工作 从教学角度,增加可读性 8.1 代码生成器的设计中的问题 8.1.2 指令的选择 目标机器指令系统的性质决定了指令选择的难易程度,指令系统的统一性和完备性是重要的因素 指令的速度和机器特点是另一些重要的因素 8.1 代码生成器的设计中的问题 若不考虑目标程序的效率,指令的选择是直截了当的 例 三地址语句x = y + z (x,y和z都静态分配) MOV y, R0 /? 把y装入寄存器R0 ?/ ADD z, R0 /? z加到R0上 ?/ MOV R0, x /? 把R0存入x中 ?/ 逐个语句地产生代码,常常得到低质量的代码 8.1 代码生成器的设计中的问题 语句序列 a = b + c d = a + e 的代码如下 MOV b, R0 ADD c, R0 MOV R0, a MOV a, R0 ADD e, R0 MOV R0, d 8.1 代码生成器的设计中的问题 语句序列 a = b + c d = a + e 的代码如下 MOV b, R0 ADD c, R0 MOV R0, a MOV a, R0 -- 多余的指令 ADD e, R0 MOV R0, d 8.1 代码生成器的设计中的问题 语句序列 a = b + c d = a + e 的代码如下 MOV b, R0 ADD c, R0 MOV R0, a MOV a, R0 -- 多余的指令 ADD e, R0 -- 若a不再使用,第三条指 MOV R0, d --令也多余 8.1 代码生成器的设计中的问题 8.1.3 寄存器分配 运算对象处于寄存器中的指令通常比运算对象处于内存的指令要短一些,执行也快一些 寄存器分配 选择驻留在寄存器中的一组变量 寄存器指派 挑选变量要驻留的具体寄存器 8.1 代码生成器的设计中的问题 8.1.4 计算次序的选择 例: 某种计算次序可能会比其它次序需要较少的寄存器来保存中间结果(见后面例题3) 8.2 目 标 机 器 8.2.1 目标机器的指令系统 选择可作为几种微机代表的寄存器机器 四个字节组成一个字,有n个通用寄存器R0,R1, …,Rn-1。 二地址指令: op 源,目的 MOV {源传到目的} ADD {源加到目的} SUB {目的减去源} 8.2 目 标 机 器 地址模式和它们的汇编语言形式及附加代价 模式 形式 地址 附加代价 绝对地址 M M 1 寄存器 R R 0 变址 c(R) c + contents(R) 1 间接寄存器 ?R contents(R) 0 间接变址 ?c(R) contents(c + contents(R)) 1 直接量 #c c 1 8.2 目 标 机 器 例 指令实例 MOV R0, M MOV 4(R0), M 4(R0):contents(4 + contents(R0)) MOV ?4(R0), M ?4(R0):conten

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档