中间代码生成1

中间代码生成1

ID:38435094

大小:270.00 KB

页数:21页

时间:2019-06-12

中间代码生成1_第1页
中间代码生成1_第2页
中间代码生成1_第3页
中间代码生成1_第4页
中间代码生成1_第5页
资源描述:

《中间代码生成1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、代码生成(I)代码生成代码生成目标-任务-设计目标机器模型基本块与流图简单的代码生成器寄存器分配与指派树重写与动态规划代码生成技术代码生成目标与任务代码生成器的位置代码生成器的任务指令选择寄存器分配与指派指令排序源程序前端中间代码代码优化器中间代码代码生成器目标代码代码生成器设计中若干问题输入形式三地址码:x=y+z;x=y;x=-y;ifx

2、数据放在内存中某个固定的位置,可立即执行。如早期DOS下.com文件。可重定位的目标程序:需要linker/loader;可分块编译。汇编代码:需借助assembler。代码生成器设计中若干问题指令选择-将IR(中间表示)映射为目标机指令序列;而映射的好与差取决于IR的层次、目标指令系统本身和期望的目标代码质量等因素。“傻瓜”式的代码骨架:针对IR:x=y+z,(1)LDR0,y(2)ADDR0,R0,z(3)STx,R0代码生成器设计中若干问题寄存器分配与指派寄存器分配-在程序的某一点,选择一组可放在寄存

3、器中的变量;寄存器指派-指定某个变量存放在哪一个寄存器中。目标机特殊硬件需求目标机器可能要求整数乘/除操作在由两个特殊寄存器组成的寄存器对上!其他特殊设计:栈顶寄存器SP,栈(帧)基址寄存器BP/FP等;中间代码序列1t=a+bt=t*ct=t/d中间代码序列2t=a+bt=t+ct=t/d特殊寄存器需求的整数乘/除操作目标代码1LR1,aAR1,bMR1,c//占据R0-R1DR0,dSTR1,t目标代码2LR0,aAR0,bAR0,cSRDAR0,32DR0,dSTR1,t目标机器模型三地址机器模型、字

4、节编址。指令种类:加载指令:LDdst,addr//dst(addr)LDr1,r2//r1r2;寄存器拷贝操作保存指令:STx,r//x=r寄存器r的内容写回到内存位置x计算指令:OPdst,src1,src2//在src1(第一操作数,即左运算量)和src2(第二操作数,即右运算量)之间实施OP运算,其结果放于目的位置dst中。三个位置不一定互不相同!如:SUBr1,r2,r3,即为r1r2-r3;以及ADDr1,r1,r2表示r1r1+r2无条件跳转:BRL将使控制流转向标号为L的机器指令;条

5、件跳转:Bcondr,L//测试r,满足则转标号L处指令;否则执行下条指令。目标机器模型寻址模式-名字地址:LDr1,y//r1位置y的值-寄存器:ADDr1,r2,r3//r1r2+r3-基址+变址:LDr1,c(r2)//r1(c+r2)-间址访问:LDr1,*r2//r1(r2)LDr1,*c(r2)//r1((c+r2))-直接量:ADDr1,r2,#100//r1r2+100指令的代价cost=1+各运算分量寻址模式代价寄存器寻址代价为0;内存地址和直接量均为1。目标机器模型若干目标指

6、令序列示例:三地址代码x=y–zb=a[i]ifx

7、条件/无条件)跳转。围绕基本块的优化:块内优化--局部优化块间优化--全局优化基本块的划分算法首先,确定基本块的首指令:中间代码的第一条三地址指令;任意一个条件或无条件跳转指令的目标指令;紧跟在一个条件或无条件跳转指令后的指令;其次,确定基本块的范围:从一个首指令开始(包括该首指令)到(连续的)下一个首指令(不包括那个首指令)或中间代码结束指令(最后一个基本块的最后一条指令)之间的所有指令。基本块划分示例//程序1//10X10矩阵初始化,//并置为单位矩阵forifrom1to10doforjfrom1t

8、o10doa[i,j]=0.0;forifrom1to10doa[i,i]=1.0;i=1j=1t1=10*it2=t1+jt3=8*t2t4=t3–88a[t4]=0.0j=j+1ifj<=10goto(3)i=i+1ifi<=10goto(2)i=1t5=i–1t6=88*t5a[t6]=1.0i=i+1ifi<=10goto(13)首指令1首指令3首指令2首指令4首指令5首指令6基本块划分示例(Cont.)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。