网站大量收购独家精品文档,联系QQ:2885784924

第九章 目标代码生成(1).ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 9 章?? 目标代码及其生成 9.1 目标代码生成的基本问题 ※ 常用的指令: ※ 四元式目标代码翻译示例: ※ 活跃信息生成过程示例: 9.1.3 寄存器的分配问题 ※ 寄存器分配过程示例: 9.1.4 目标代码生成问题 ※ 单寄存器下目标代码生成要点: 习题: 【习题9.1】解释下列词语: ⑴ 活跃变量; ⑵ 寄存器分配三原则;⑶ 描述表; 【习题9.2】试写出单寄存器 R 下的目标代码序列: ⑴ x=(a+b)/(c-d)+(a+b); ⑵ if (A!=0){A=2+B/C;B=2+B/C;} 【习题9.3】已知下列语句: x=(a+b)/(c-d)+(a+b); ⑴ 写出优化的四元式序列; ⑵ 标注变量活跃信息(活跃) ; ⑶ 描述两个寄存器(R0,R1)下的目标代码生成过程。 * * 目标生成是编译的最后一个阶段,其功能可表示如下: 目标生成 中间代码 目标代码 符号表 其中: 中间代码 ---- 逆波兰式,三元式,四元式,语义树;… 目标代码 ---- 机器语言,汇编语言,… 符 号 表 ---- 变量的语义词典,… 9.1 目标代码生成的基本问题 9.2 四元式的目标代码生成算法 内容提要 9.3 一个简单代码生成器设计 9.1.1 目标代码选择 虚拟机及其指令系统: 大多数编译程序不产生绝对地址的机器代码,而是以汇编语言程序作为输出使代码生成阶段变得容易。此外,指令集的选择以及指令的执行速度问题都是重要因素。为了使算法具有通用性,这里采用的是: 虚拟机寄存器 R0 , R1 ,… , Rn-1 虚拟机指令系统 ※ 指令的基本形式:op Ri , Rk/M 操作码 变量的内存地址 含义: Ri:= (Ri)op(Rk) Ri:= (Ri)op(M) 或 【注】若 op 为单目运算,则 op Ri , Rk/M 含义是: Ri:= op(Rk/M) LD Ri,Rk/M …… Ri:= (Rk/M) ST Ri,Rk/M …… Rk/M:=(Ri) FJ Ri, M …… 若 (Ri)==false 则转 M TJ Ri, M …… 若 (Ri)==true 则转 M JMP _, M …… 无条件转 M ADD Ri,Rk/M …… Ri:=(Ri)+(Rk/M) SUB Ri,Rk/M …… Ri:=(Ri)-(Rk/M) MUL Ri,Rk/M …… Ri:=(Ri)*(Rk/M) DIV Ri,Rk/M …… Ri:=(Ri)/(Rk/M) 此外还有下述 操作码 op : LT(),GT(),EQ(==),LE(=),GE(=),NE(!=) AND(),OR(||),NO(!) 取、存 转 向 算术运算 逻辑运算 【例9.1】 ⑴( + a b t1 ) ⑵( - t1 d t2 ) ③SUB R0,d ①LD R0,a ②ADD R0,b 【例9.2】 ⑴( + a b t1 ) ⑵( - c d t2 ) ③LD R1,c ①LD R0,a ②ADD R0,b ⑶( * t1 t2 t3 ) ④SUB R1,d ⑤MUL R0,R1 讨论 ⑴ 为了精简代码,四元式结果变量值并不急于存储! ⑵ 例9.1中的t1的值,系统如何知道是在寄存器R0中? ⑶ 例9.2存在寄存器分配问题,显然,若t2仍然占用寄存器R0,则t1值将丢掉! 9.1.2 变量的活跃信息 Ⅰ. 变量的定义点和应用点 ※ 设有四元式:q( ? B C A ) B,C的应用点(q) A的定义点(q) Ⅱ. 活跃变量与非活跃变量 【活跃变量】一个变量从某时刻(q)起,到下一个定义点止,其间若有应用点,则称该变量在q是活跃的(y),否则称该变量在q是非活跃的(n)。 【注】我们是在一个基本块内讨论变量的活跃信息的,为了处理方便,假定: ⑴ 临时变量在基本块出口后是非活跃的(n); ⑵ 非临时变量在基本块出口后是活跃的(y); 【例9.3】求下述基本块内变量的活跃信息: x=(a+b)/(a*(a+b));i=a+b; 【解】令 A(l)中的 l 为变量A 在某点的活跃信息(y/n); 则有四元式序列: ⑴(+ a b t1 ) ⑵(* a t1 t3 ) ⑶(/ t1 t3 x ) ⑷(= t1 _ i ) ⑴(+ a b t1 ) ⑵(+ a b t2 ) ⑶(* a t2 t3 ) ⑷(/ t1 t3 t4 ) ⑸(= t4 _ x ) ⑹(+ a b t5 ) ⑺(= t5

文档评论(0)

qingfengxulai + 关注
实名认证
内容提供者

文档来源于网络

1亿VIP精品文档

相关文档