第10章 目标代码生成.ppt
1编译原理电子教案韶关学院计算机系程细柱第第1010章章 目标代码生成目标代码生成|目标代码目标代码(单寄存器单寄存器)|临时变量的存储空间分配临时变量的存储空间分配|寄存器的分配和释放寄存器的分配和释放2编译原理电子教案韶关学院计算机系程细柱10.1 目标代码目标代码|虚拟目标代码:虚拟目标代码:虚拟机上的目标程序。虚拟机上的目标程序。在本地机器上具备虚拟机的解释器。在本地机器上具备虚拟机的解释器。|实际目标代码:实际目标代码:实际机器上的指令序列实际机器上的指令序列 绝对地址机器代码:绝对地址机器代码:可重定位的机器代码:可重定位的机器代码:汇编代码:汇编代码:3编译原理电子教案韶关学院计算机系程细柱三种硬件地址模式三种硬件地址模式|指令格式:指令格式:Op#C R Op#C R (立即立即-寄存器)寄存器)Op d(R1)R2 Op d(R1)R2 (存储器存储器-寄存器)寄存器)Op R1 R2 Op R1 R2 (寄存器寄存器-寄存器)寄存器)|几个常见指令的含义几个常见指令的含义 :Load Source R Load Source R 从从Source Source 读出送入读出送入R R Op Source R Source op R Op Source R Source op R结果结果 送入送入R R Store Target R R Store Target R R的内容送入的内容送入Target.Target.4编译原理电子教案韶关学院计算机系程细柱目标代码的生成(单寄存器)目标代码的生成(单寄存器)|形如(形如(OpOp,A A,B B,T T):):Load A RLoad A R;Op B ROp B R|形如形如(ASSIG,A,B)ASSIG,A,B):Load A RLoad A R;Store R BStore R B|例:例:Z:=X*(a+b)*Y*(a+b)Z:=X*(a+b)*Y*(a+b)(,a,b,t1)a,b,t1)Load a R;Add b RLoad a R;Add b R(*,(*,X,t1,t2)X,t1,t2)Store R t1;Store R t1;MultMult X R X R(*,(*,t2,Y,t3)t2,Y,t3)MultMult Y R Y R(*,(*,t3,t1,t4t3,t1,t4)MultMult t1 R t1 R5编译原理电子教案韶关学院计算机系程细柱标号和标号和Jump的代码的代码|标号到代码地址的对应表(标号到代码地址的对应表(flag,L,Addr)|形如形如(Label L):当对应表中没有当对应表中没有L项时:项时:填写表项填写表项(1,L,Pc),Pc表表示示 下一条目标代码的地址。下一条目标代码的地址。当有当有L项项(0,L,P)时:时:从从P顺着链回填地址顺着链回填地址Pc|形如形如(Jump L):对应表中没有对应表中没有L项时构造链头项时构造链头P:(Jump,nil):填写表项填写表项(0,L,P);当有表项当有表项(0,L,P)时:时:拉链拉链P:(Jump P),修改表修改表项为项为 (0,L,P);当有表项当有表项(1,L,P)时:时:取出取出L的地址的地址P生成代码。生成代码。6编译原理电子教案韶关学院计算机系程细柱过程过程/函数调用的代码函数调用的代码|主要工作:主要工作:过函调用时:过函调用时:申请新申请新AR空间空间 参数传递参数传递 转向转向 过程体过程体 过函入口:过函入口:填写填写AR的相关内容。的相关内容。过函返回时:过函返回时:释放释放AR区区 恢复信息恢复信息 返回值返回值|参数传递的代码:参数传递的代码:值参:值参:(VALACT,a,off,1)VALACT,a,off,1):Load a(sp)RLoad a(sp)R Store off(top)R Store off(top)R (VALACT,A,off,1)(VALACT,A,off,1):Load A(sp)RLoad A(sp)R Store off(top)R Store off(top)R 7编译原理电子教案韶关学院计算机系程细柱变参:变参:(VARACT,a,off,1)VARACT,a,off,1):LoadA a(sp)RLoadA a(sp)R Store off(top)R Store off(top)R (VARACT,A,off,1)VARACT,A,off,1):Load A(sp)RLoad A(sp)R Store off(top)R Store off(top)R过函形参:过函形参:(PROCACT,p,off,1)PROCACT,p,off,1):Load Enter(p)RLoad Enter(p)R Store off(top)R Store off(top)R (PROCACT,P,off,1)(PROCACT,P,off,1):Load P(sp)RLoad P(sp)R Store off(top)R Store off(top)R8编译原理电子教案韶关学院计算机系程细柱|过函调用过函调用CallCall:传参;传参;(Call,g,True)Call,g,True):JumpJump Enter(g)Enter(g)(Call,G,False)Call,G,False):JumpJump G(sp)G(sp)|入口入口(Entry,Label,size,Level)Entry,Label,size,Level):填写填写ARAR信息;信息;Load top sp ADD top size Load top sp ADD top size|出口出口(ENDPROC,-)ENDPROC,-):恢复调用前的信息和寄存器内容;恢复调用前的信息和寄存器内容;保存返回值;保存返回值;Load sp topLoad sp top;Load Load DyL(spDyL(sp)sp)sp;Jump Re_A(top)Jump Re_A(top)9编译原理电子教案韶关学院计算机系程细柱10.2 临时变量临时变量|特点:特点:寿命短;寿命短;一次定义一次使用一次定义一次使用|存储空间存储空间:尽可能采用共享办法:尽可能采用共享办法 随用随分配的动态分配:随用随分配的动态分配:调用一个过程时,分配一个新的调用一个过程时,分配一个新的AR空间空间(不包括临不包括临 时变量部分时变量部分),每当要保存一个临时变量时,动态,每当要保存一个临时变量时,动态 分配到栈区的可用单元中分配到栈区的可用单元中 按共享法静态分配:按共享法静态分配:先计算出临时变量的空间,在过程调用时和源变量先计算出临时变量的空间,在过程调用时和源变量 一起申请空间。即调用时将临时变量安排在一起申请空间。即调用时将临时变量安排在AR中。中。10编译原理电子教案韶关学院计算机系程细柱临时变量的静态分配临时变量的静态分配|定值点:定值点:如果如果i中间代码给临时变量中间代码给临时变量T定值,定值,则称则称i为临时变量为临时变量T的定值点。的定值点。|引用点:引用点:如果如果j中间代码使用中间代码使用T,则称则称j为为T的的 引用点。引用点。|活动区间:活动区间:如果如果i是是T的定值点,的定值点,j是是T的最后的最后 引用点,则称引用点,则称i,j是是T的活动区间。的活动区间。|活动区间活动区间i,j和和m,n不严格相交:不严格相交:如果如果m j或或i n。|空间分配:空间分配:如果两个临时变量的活动区间不严格相交,则可以如果两个临时变量的活动区间不严格相交,则可以 共享单元共享单元11编译原理电子教案韶关学院计算机系程细柱T1T2T3T4T5Offset=m Offset=m+1 Offset=m+1 Offset=m+1 Offset=m例:例:12编译原理电子教案韶关学院计算机系程细柱10.3 寄存器寄存器|寄存器的分类:寄存器的分类:可分配寄存器可分配寄存器 保留寄存器保留寄存器 零用寄存器零用寄存器|寄存器的使用准则:寄存器的使用准则:寄存器先行准则寄存器先行准则 寄存器活跃准则寄存器活跃准则 寄存器多载准则寄存器多载准则|变量的状态描述:变量的状态描述:13编译原理电子教案韶关学院计算机系程细柱寄存器的分配寄存器的分配|分配原则:分配原则:选择代价最小的寄存器选择代价最小的寄存器|寄存器状态描述:寄存器状态描述:|寄存器的选择代价:寄存器的选择代价:Store代价代价 Load代价代价