1 / 13

第十章 目标代码生成

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

teva
Download Presentation

第十章 目标代码生成

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十章 目标代码生成 • 目标代码(单寄存器) • 临时变量的存储空间分配 • 寄存器的分配和释放

  2. 目标代码 • 虚拟目标代码:虚拟机上的目标程序。 • 在本地机器上具备虚拟机的解释器。 • 实际目标代码:实际机器上的指令序列 • 绝对地址机器代码: • 可重定位的机器代码: • 汇编代码:

  3. 三种硬件地址模式 • 指令格式: Op #C R (立即-----寄存器) Op d(R1) R2 (存储器-----寄存器) Op R1 R2 (寄存器-----寄存器) • 几个常见指令的含义 : Load Source R 从Source 读出送入R Op Source R Source op R结果 送入R Store Target R R的内容送入Target.

  4. 目标代码的生成(单寄存器) • 形如(Op,A,B,T):Load A R;Op B R • 形如(ASSIG,A,B):Load A R;Store R B • 例:Z:= X*(a+b)* Y* (a+b)

  5. 标号和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):Load a(sp) R Store off(top) R (VALACT,A,off,1):Load @A(sp) R Store off(top) R

  7. 变参: (VARACT,a,off,1):LoadA a(sp) R Store off(top) R (VARACT,A,off,1):Load A(sp) R Store off(top) R 过函形参: (PROCACT,p,off,1):Load Enter(p) R Store off(top) R (PROCACT,P,off,1):Load P(sp) R Store off(top) R

  8. 过函调用Call:传参; (Call,g,True):Jump Enter(g) (Call,G,False):Jump @G(sp) • 入口 (Entry,Label,size,Level) : 填写AR信息; Load top sp ADD top size • 出口(ENDPROC,---): 恢复调用前的信息和寄存器内容; 保存返回值; Load sp top; Load DyL(sp) sp; Jump Re_A(top)

  9. 临时变量 • 特点: 寿命短; 一次定义一次使用 • 存储空间:尽可能采用共享办法 • 随用随分配的动态分配: • 调用一个过程时,分配一个新的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. 例: T1 Offset = m T2 Offset = m+1 T3 Offset = m+1 T4 Offset = m T5 Offset = m+1

  12. 寄存器 • 寄存器的分类: 可分配寄存器 保留寄存器 零用寄存器 • 寄存器的使用准则: 寄存器先行准则 寄存器活跃准则 寄存器多载准则 • 变量的状态描述:

  13. 寄存器的分配 • 分配原则:选择代价最小的寄存器 • 寄存器状态描述: • 寄存器的选择代价: Store代价 Load代价

More Related