中间代码生成1.ppt
《中间代码生成1.ppt》由会员分享,可在线阅读,更多相关《中间代码生成1.ppt(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、代码生成(I)代码生成代码生成目标任务设计目标机器模型基本块与流图简单的代码生成器寄存器分配与指派树重写与动态规划代码生成技术代码生成目标与任务代码生成器的位置代码生成器的任务指令选择寄存器分配与指派指令排序源程序前端中间代码代码优化器中间代码代码生成器目标代码代码生成器设计中若干问题输入形式三地址码:x=y+z;x=y;x=-y;if x y goto L;具体实现可以是:四元式 三元式 间接三元式等。堆栈机代码后缀式(逆波兰式)图形表示:树、DAG代码生成器设计中若干问题目标程序绝对地址目标程序:程序中代码与数据放在内存中某个固定的位置,可立即执行。如早期DOS下.com文件。可重定位的目
2、标程序:需要linker/loader;可分块编译。汇编代码:需借助assembler。代码生成器设计中若干问题指令选择将IR(中间表示)映射为目标机指令序列;而映射的好与差取决于IR的层次、目标指令系统本身和期望的目标代码质量等因素。“傻瓜”式的代码骨架:针对IR:x=y+z,(1)LD R0,y(2)ADD R0,R0,z(3)ST x,R0代码生成器设计中若干问题寄存器分配与指派 寄存器分配在程序的某一点,选择一组可放在寄存器中的变量;寄存器指派指定某个变量存放在哪一个寄存器中。目标机特殊硬件需求目标机器可能要求整数乘/除操作在由两个特殊寄存器组成的寄存器对上!其他特殊设计:栈顶寄存器S
3、P,栈(帧)基址寄存器BP/FP等;中间代码序列中间代码序列1t=a+bt=t*ct=t/d中间代码序列中间代码序列2 t=a+bt=t+ct=t/d特殊寄存器需求的整数乘/除操作目标代码目标代码1 L R1,aA R1,bM R1,c/占据占据R0-R1 D R0,d ST R1,t目标代码目标代码2 L R0,aA R0,bA R0,cSRDA R0,32D R0,dST R1,t目标机器模型三地址机器模型、字节编址。指令种类:加载指令:LD dst,addr /dst (addr)LD r1,r2/r1 r2;寄存器拷贝操作保存指令:ST x,r /x=r 寄存器r的内容写回到内存位置x
4、计算指令:OP dst,src1,src2/在src1(第一操作数,即左运算量)和src2(第二操作数,即右运算量)之间实施OP运算,其结果放于目的位置dst中。三个位置不一定互不相同!如:SUB r1,r2,r3,即为 r1 r2-r3;以及ADD r1,r1,r2 表示 r1 r1+r2无条件跳转:BR L 将使控制流转向标号为L的机器指令;条件跳转:Bcond r,L /测试r,满足则转标号L处指令;否则执行下条指令。目标机器模型寻址模式 名字地址:LD r1,y /r1 位置y的值 寄存器:ADD r1,r2,r3/r1 r2+r3 基址变址:LD r1,c(r2)/r1(c+r2)间
5、址访问:LD r1,*r2/r1 (r2)LD r1,*c(r2)/r1(c+r2)直接量:ADD r1,r2,#100/r1 r2+100指令的代价cost=1+各运算分量寻址模式代价 寄存器寻址代价为0;内存地址和直接量均为1。目标机器模型若干目标指令序列示例:三三地地址址代代码码x=y zb=aiif x y goto L目目标标指指令令序序列列LD r1,yLD r2,zSUB r1,r1,r2ST x,r1LD r1,iMUL r1,r1,8LD r2,a(r1)ST b,r2LD r1,xLD r2,ySUB r1,r1,r2BLTZ r1,M代代价价2+2+1+2=72+2+2+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中间 代码 生成
限制150内