定义6.1表达式E翻译成某给定机器语言或 汇编语言是最优的,当且仅当这一翻译有 最少的指令条数。 对于(a+b)(c+d)显然第二段代码更优。 影响表达式指令长度的因素?
▪ 定义6.1表达式E翻译成某给定机器语言或 汇编语言是最优的,当且仅当这一翻译有 最少的指令条数。 ▪ 对于(a+b)/(c+d)显然第二段代码更优。 ▪ 影响表达式指令长度的因素?
例2a+b*c的两段代码 2 LOAD LOAD MPY MPY ■ STORE T1 ADD ■ LOAD a ADD T1 利用了加法的交换律 利 b*c+a 吉郎
例2 a+b*c的两段代码 ▪ LOAD b ▪ MPY c ▪ STORE T1 ▪ LOAD a ▪ ADD T1 ▪ LOAD b ▪ MPY c ▪ ADD a 1 2 利用了加法的交换律 b*c+a
例3a*b+c*b的两段代码 1 2 ■ LOAD LOAD MPY b ADD STORE T1 MPY LOAD a MPY b ADD T1 利用了运算的分配律 (a+c)*b=a*b+c*b
例3 a*b+c*b的两段代码 ▪ LOAD c ▪ MPY b ▪ STORE T1 ▪ LOAD a ▪ MPY b ▪ ADD T1 ▪ LOAD a ▪ ADD c ▪ MPY b 1 2 利用了运算的分配律 (a+c)*b=a*b+c*b
例4a*(b*c)+d*c的两段代码 2 LOAD LOAD MPY MPY b STORE T1 ADD LOAD a MPY T1 MPY STORE T1 LOAD d 利用了运算的结合律和 MPY c 分配律 STORE a*(b*c)+d*c LOAD T1 =(a*b)*c+d*c ADD T2 =(a*b+d)*c
例4 a*(b*c)+d*c的两段代码 ▪ LOAD b ▪ MPY c ▪ STORE T1 ▪ LOAD a ▪ MPY T1 ▪ STORE T1 ▪ LOAD d ▪ MPY c ▪ STORE T2 ▪ LOAD T1 ▪ ADD T2 ▪ LOAD a ▪ MPY b ▪ ADD d ▪ MPY c 1 2 利用了运算的结合律和 分配律 a*(b*c)+d*c =(a*b)*c+d*c =(a*b+d)*c
影响表达式代码长度的因素 1.表达式本身的长度 2.表达式中运算的可交换交换律 3.表达式中运算的可分配性分配律 4.表达式中运算的可结合性-结合律 晶 >其中:+-*/,运算中,加法和乘法具有交换 分配和结合性 一
影响表达式代码长度的因素 1. 表达式本身的长度 2. 表达式中运算的可交换-----交换律 3. 表达式中运算的可分配性-----分配律 4. 表达式中运算的可结合性------结合律 ➢ 其中:+ - * /,运算中,加法和乘法具有交换、 分配和结合性