7.1代码生成器设计中的问题 7.1.2指令选择 目标机器指令集的性质决定了指令选择的难 易程度,指令集的统一性和完备性是重要的 因素 ·指令的速度和机器特点是另一些重要的因素
7 1. 代码生成器设计中的问题 7.1.2 指令选择 • 目标机器指令集的性质决定了指令选择的难 易程度,指令集的统一性和完备性是重要的 因素 • 指令的速度和机器特点是另 指令的速度和机器特点是另 些重要的因素 一些重要的因素
7.1代码生成器设计中的问题 若不考虑目标程序的效率,指令的选择是直 截了当的 ,例三地址语句x=y+z(X、y和z都静态分配) RO /把y装入寄存器R0*/ ADD Z, RO /*Z加到R0上*/ MOV R0, X /*把R0存入x中*/ 逐个语句地生成代码,常常得到低质量的代码
7 1. 代码生成器设计中的问题 • 若不考虑目标程序的效率,指令的选择是直 截了当的 • 例 三地址语句x = y + z (x、y和z都静态分配) MOV y, R0 / 把y装 寄存 入 器R0 / ADD z, R0 / z加到R0上 / MOV R0, x / 把R0存入x中 / 逐个语句地生成代码,常常得到低质量的代码
7.1代码生成器设计中的问题 语句序列a=b+c d=a+e 的代码如下 MOV b, RO ADD C, RO MOV R0, a MOV a, RO ADD e, RO MOV R0, d
7 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
7.1代码生成器设计中的问题 语句序列a=b+c d=a+e 的代码如下 MOV b, RO ADD C, RO MOV R0, a MOV a, RO -多余的指令 ADD e, RO MOV R0, d
7 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
7.1代码生成器设计中的问题 语句序列a=b+c d=a+e 的代码如下 MOV b, RO ADD C, RO MOV R0, a MOV a, RO 多余的指令 ADD e, RO -若a不再使用,第三条指 MOV R0,d -令也多余
7 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 --令也多余