目标代码生成_第1页
目标代码生成_第2页
目标代码生成_第3页
目标代码生成_第4页
目标代码生成_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、| 目标代码目标代码(单寄存器单寄存器)| 临时变量的存储空间分配临时变量的存储空间分配| 寄存器的分配和释放寄存器的分配和释放| 虚拟目标代码:虚拟目标代码:虚拟机上的目标程序。虚拟机上的目标程序。 在本地机器上具备虚拟机的解释器。在本地机器上具备虚拟机的解释器。| 实际目标代码:实际目标代码:实际机器上的指令序列实际机器上的指令序列 绝对地址机器代码:绝对地址机器代码: 可重定位的机器代码:可重定位的机器代码: 汇编代码:汇编代码:| 指令格式:指令格式: Op #C R Op #C R (立即立即-寄存器)寄存器) Op d(R1) R2 Op d(R1) R2 (存储器存储器-寄存器)

2、寄存器) 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.| 形如(形如(OpOp,A A,B B,T T):):Load A RLoad A R;Op B ROp B R| 形如形如(

3、(ASSIG,A,B)ASSIG,A,B):Load A RLoad A R;Store R BStore R B| 例:例:Z:= XZ:= X* *(a+b)(a+b)* * Y Y* * (a+b) (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,t4)t3,t1,t4) Mul

4、tMult t1 R t1 R| 标号到代码地址的对应表(标号到代码地址的对应表(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),修改表项为修改表项

5、为 (0,L,P); 当有表项当有表项(1,L,P)时:时: 取出取出L的地址的地址P生成代码。生成代码。| 主要工作:主要工作: 过函调用时:过函调用时:申请新申请新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 (VA

6、LACT,A,off,1) (VALACT,A,off,1):Load A(sp) RLoad A(sp) R Store off(top) R Store off(top) R 变参:变参: ( (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过函形参:过函形参: ( (PR

7、OCACT,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) R| 过函调用过函调用CallCall:传参;传参; ( (Call,g,True)Call,g,True):JumpJump Enter(g) Enter(g) ( (Call,G,False)Call,G,False)

8、: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

9、(top) | 特点:特点: 寿命短;寿命短; 一次定义一次使用一次定义一次使用| 存储空间存储空间:尽可能采用共享办法:尽可能采用共享办法 随用随分配的动态分配:随用随分配的动态分配: 调用一个过程时,分配一个新的调用一个过程时,分配一个新的AR空间空间(不包括临不包括临 时变量部分时变量部分),每当要保存一个临时变量时,动态,每当要保存一个临时变量时,动态 分配到栈区的可用单元中分配到栈区的可用单元中 按共享法静态分配:按共享法静态分配: 先计算出临时变量的空间,在过程调用时和源变量先计算出临时变量的空间,在过程调用时和源变量 一起申请空间。即调用时将临时变量安排在一起申请空间。即调用时将

10、临时变量安排在AR中。中。| 定值点:定值点:如果如果i中间代码给临时变量中间代码给临时变量T定值,定值, 则称则称i为临时变量为临时变量T的定值点。的定值点。| 引用点:引用点:如果如果j中间代码使用中间代码使用T,则称则称j为为T的的 引用点。引用点。| 活动区间:活动区间:如果如果i是是T的定值点,的定值点,j是是T的最后的最后 引用点,则称引用点,则称i, j是是T的活动区间。的活动区间。| 活动区间活动区间i, j和和m, n不严格相交:不严格相交: 如果如果m j或或i n。| 空间分配:空间分配: 如果两个临时变量的活动区间不严格相交,则可以如果两个临时变量的活动区间不严格相交,则可以 共享单元共享单元T1T2T3T4T5Offset = m Offset = m+1 Offset = m+1 Offset = m+1 Offset = m例:例:| 寄存器的分类:寄存器的分类: 可分配寄存器可分配寄存器 保留寄存器保留寄存器 零用寄存器零用寄存器| 寄存器的使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论