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