编译原理,中间代码优化与目标代码生成
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
删除公共 子表达式
t11=t2 x=a[t11] t12=t11 t13=t1 t14=a[t13] a[12]=t14 t14=t13 a[15]=x
在B1中t1=4*n;
目标代码生成
• 目标代码生成是编译最后一个阶段,它把 中间代码转换成汇编指令或可重定位的目 标代码。
• 对于语句 • x = y + z – m * 10; • 可以产生IBM PC汇编 指令
B6 t11=4*I x=a[t11] t12=4*I t13=4*n t14=a[t13] a[12]=t14 t14=4*n a[15]=x
t6=4*i x=a[t6] t7=4*i t8=4*j t9=a[t8] a[t7]=t9 t10=4*j a[t10]=x goto b2
B5
删除公共 子表达式
对中间代码进行变换加工以便在最后产生高效的目标代码
中间代码优化
• 对中间代码进行变换加工,以便在最后产 生高效的目标代码。
例:快速排序程序
Void quicksort(a,m,n); Int m,n,a[]; { int I,j; int v,x; if(n<=m) return; I=m-1;j=n;v=a[n] While(1){ Do {I=I+1;}while (a[I]<v); Do{j=j-1;}while(a[j]>v); If(I>=j)break; X=a[I];a[I]=a[j];a[j]=x; } X=a[I];a[I]=a[n];a[n]=x; Quicksort(m,j);quicksort(I+1,n); }
i=i+1 t2=4*i t3=a[t2] If t3<v goto B2 j=j-1 t4=4*j t5=a[t4] If t5<v goto B3 If I>=j goto b6
B2
t11=4*I x=a[t11] j=j-1 i=i+1 t12=4*I t4=4*jgoto B6 t2=4*i if i>=j t13=4*n i=m-1 t5=a[t4] t3=a[t2] B3 t14=a[t13] j=n if t5<v goto B3 if t3<v goto B2 a[12]=t14 t1=4*n t14=4*n v=a[t1] a[15]=x B4
• • • • • •
mov mul mov sub add mov
ax, m ax, 10 bx, z bx,ax bx,y x, bx
t6=t2 x=a[t6] t7=t6 t8=t4 t9=a[t8] a[t7]=t9 t10=t8 a[t10]=x goto b2
在B2中t2=4*i; 在B3 中t4=4*j
B6
t11=4*i x=a[t11] t12=4*t14 t14=4*n a[15]=x
中间代码程序段
i=m-1 j=n t1=4*n v=a[t1]
B1
t6=4*I x=a[t6] t7=4*i t8=4*j t9=a[t8] a[t7]=t9 t10=4*j a[t10]x B5 goto b2
t6=4*I x=a[t6] t7=4*i t8=4*j t9=a[t8] a[t7]=t9 t10=4*j a[t10]x goto b2