对于表达式a+(-bc+d)*e 的三元式则可用图62的树来 表示。该图也是表达式a+( bc+d)'e的三元式(5)表示 树的根,每个子表达式用 棵子树表示,可以看出对于 该树的前序遍历、中序遍历 (对不符合运算符的优先级 d 的运算应加上括号)和后序 遍历分别产生的是前缀式 中缀式和逆波兰式,因此树 型表示隐含了三元式表示和 逆波兰表示 b
对于表达式a+(-b*c+d)*e 的三元式则可用图6-2的树来 表示。该图也是表达式a+(- b*c+d)*e的三元式(5)表示 树的根,每个子表达式用一 棵子树表示,可以看出对于 该树的前序遍历、中序遍历 (对不符合运算符的优先级 的运算应加上括号)和后序 遍历分别产生的是前缀式、 中缀式和逆波兰式,因此树 型表示隐含了三元式表示和 逆波兰表示
6.13四元式 由于三元式中的结果是用它的编号来表示的,当在三元 式组进行优化后,就要用一定的时间来,重新按排三元式的 编号,这是很费时的。为了防止优化后的重新编址,在三元 式基础上增加了一个存放结果的单元,这就形成了四元式。 四元式是一种最常用的形式。其格式是: (<运算符>,<运算对象>,<运算对象2>,<结果>) 则表达式a+(b*c+d)e的四元式序列为: (1)(-,b,,t1) (2)(*,t1,C,t2 (3)(+,t2,d, 4)(*,t (5)(+,a,t4,te
6.1.3 四元式 由于三元式中的结果是用它的编号来表示的,当在三元 式组进行优化后,就要用一定的时间来,重新按排三元式的 编号,这是很费时的。为了防止优化后的重新编址,在三元 式基础上增加了一个存放结果的单元,这就形成了四元式。 四元式是一种最常用的形式。其格式是: ( <运算符> ,<运算对象1> ,<运算对象2>,<结果>) 则表达式a+(-b*c+d)*e的四元式序列为: (1)(-, b,_,t1) (2)(* ,t1,c ,t2) (3)(+,t2,d,t3) (4)(* ,t3,e,t4) (5)(+,a,t4,t5)
四元式虽然比三元式多了一结果的引用,但减少相互之 间的引用,从而有利于优化。为了便于书写四元式也可以写 成如下形式: <结果>:=<运算对象1<运算符x<运算对象2> 则表达式a+(b*c+d)e的四元式序列为 (1)t1=-b (2)t2:=t1'c (3)ta=t2+d (4)t4 (5)ts:=a+4 同样要将算法语言翻译成相应的四元式,也要将四元式 扩充到其它运算符,如:(jmp,,L)表示无条转向第L条 四元式,( Zjnzjg/jljle/jge,A,B,L)表示比较A和B分别满足相等, 小于等于或天于等子的6个条件转移到 第L条四元式执行。其它扩充的四元式在以后本章其它各节 中分别介绍
四元式虽然比三元式多了一结果的引用,但减少相互之 间的引用,从而有利于优化。为了便于书写四元式也可以写 成如下形式: <结果>:= <运算对象1> <运算符><运算对象2> 则表达式a+(-b*c+d)*e的四元式序列为: (1)t1 := - b (2)t2 := t1 *c (3)t3 := t2+d (4)t4 := t3 *e (5)t5 := a +t4 同样要将算法语言翻译成相应的四元式,也要将四元式 扩充到其它运算符,如:(jmp,_,_L)表示无条转向第L条 四元式,(jz/jnz/jg/jl/jle/jge,A,B,,L)表示比较A和B分别满足相等, 不等、大于、小于、小于等于或大于等于的6个条件转移到 第L条四元式执行。其它扩充的四元式在以后本章其它各节 中分别介绍
614汇编语言 汇编语言是依赖于机器的低级程序设计语言,它是面向 具体的计算机系统或相应的计算机系列的,它和三元式、四 元式和逆波兰式相比有以下优点: ()能方便地翻译成目标机器指令由于汇编代码采用的是助 记符操作码方式表示的机器指令,它基本上与机器指令 对应。比三元式、四元式更接近计算机硬件;故更容易翻译 成机器指令,且不必宙编译程序设计者来并发箕翻译程序。 (2)不必直接计算转移地址由于在汇编语言中可以用符号名 表示数据或机器指令的地址和在汇编语言中的转移均可使用 符号地址。它比三元式、四元式的生成转移更方便,更灵活 ③3)可以使用各种数据表示法由于汇编语言中提供了各种数 制的翻译,因此在生成汇编语言时可以使用各种数制,而不 必再进行直接转换
6.1.4 汇编语言 汇编语言是依赖于机器的低级程序设计语言,它是面向 具体的计算机系统或相应的计算机系列的,它和三元式、四 元式和逆波兰式相比有以下优点: (1) 能方便地翻译成目标机器指令 由于汇编代码采用的是助 记符操作码方式表示的机器指令,它基本上与机器指令一一 对应。比三元式、四元式更接近计算机硬件,故更容易翻译 成机器指令,且不必由编译程序设计者来开发其翻译程序。 (2) 不必直接计算转移地址 由于在汇编语言中可以用符号名 表示数据或机器指令的地址和在汇编语言中的转移均可使用 符号地址。它比三元式、四元式的生成转移更方便,更灵活。 (3)可以使用各种数据表示法 由于汇编语言中提供了各种数 制的翻译,因此在生成汇编语言时可以使用各种数制,而不 必再进行直接转换
例如,表达式a+(-bc+d)ye的类ntel8088的汇编语言语句为: mov ax b neg ax moy bx. c imul bx mov bx d add ax bx moy bx.e imul bx mov bx. a add ax bx mov t ax
例如,表达式a+(-b*c+d)*e的类Intel8088的汇编语言语句为: mov ax,b neg ax mov bx,c imul bx mov bx,d add ax,bx mov bx,e imul bx mov bx,a add ax,bx mov ti ,ax