第九章代码生成.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9.2 目 标 机 器 指令实例 MOV R0, M MOV 4(R0), M contents(4 + contents(R0)) MOV *4(R0), M contents(contents(4+contents(R0))) MOV #1, R0 9.2 目 标 机 器 9.2.2 指令开销 指令代价取成1加上它的源和目的地址模式的附加代价 指令 代价 MOV R0,R1 1 MOV R5,M 2 ADD #1, R3 2 SUB 4(R0), *12(R1) 3 9.2 目 标 机 器 a := b + c, a、b和c都静态分配内存单元 MOV b, R0 ADD c, R0 开销= 6 MOV R0, a 9.2 目 标 机 器 a := b + c, a、b和c都静态分配内存单元 MOV b, R0 ADD c, R0 开销= 6 MOV R0, a MOV b, a ADD c, a 开销= 6 9.2 目 标 机 器 a := b + c, a、b和c都静态分配内存单元 若R0,R1和R2分别含a,b和c的地址,则 MOV *R1, *R0 ADD *R2, *R0 开销= 2 9.2 目 标 机 器 a := b + c, a、b和c都静态分配内存单元 若R0,R1和R2分别含a,b和c的地址,则 MOV *R1, *R0 ADD *R2, *R0 开销= 2 若R1和R2分别含b和c的值,并且b的值在这个 赋值后不再需要,则 ADD R2, R1 MOV R1, a 开销= 3 9.3 基本块和流图 怎样为三地址语句序列生成目标代码? begin |(1) prod := 0 prod := 0; |(2) i := 1 i := 1; |(3) t1 := 4* i do begin |(4) t2:= a[t1] prod := prod + a[i] * b[i]; |(5 ) t3 := 4* i i := i +1 |(6 ) t4 := b[t3] end while i = 20 |(7 ) t5 := t2 * t4 end |(8 ) t6 := prod + t5 |(9 ) prod := t6 |(10) t7 := i +1 |(11) i := t7 |(12 ) if i = 20 goto (3) 9.3 基本块和流图 9.3.1 基本块 基本块:连续的语句序列,控制流从它的开始进入,并从它的末尾离开 再用有向边表示基本块之间的控制流信息,就能得到程序的流图 9.3 基本块和流图 将三地址语句序列划分成基本块 首先确定所有的入口语句 序列的第一个语句是入口语句 能由条件转移语句或无条件转移语句转到的语句是入口语句 紧跟在条件转移语句或无条件转移语句后面的语句是入口语句 每个入口语句到下一个入口语句之前的语句序列构成一个基本块 9.3 基本块和流图 (1) prod := 0 (2) i := 1 (3) t1 := 4* i (4) t2:= a[t1] (5 ) t3 := 4* i (6 ) t4 := b[t3] (7 ) t5 := t2 * t4 (8 ) t6 := prod + t5 (9 ) prod := t6 (10) t7 := i +1 (11) i := t7 (12 ) if i = 20 goto (3) (1)prod := 0 (2) i := 1 (3) t1 := 4* i (4) t2:= a[t1] (5) t3 := 4* I (6) t4 := b[t3] (7) t5 := t2 * t4 (8) t6 := prod + t5 (9) prod := t6 (10) t7 := i +1 (11) i := t7 (12) if i = 20 goto (3) B1 B2 9.3 基本块和流图 9.3.2 基本块的变换 三地址语句x := y + z引用y和z并对x定值 一个名字的值在基本块的某一点以后还要引用的话,我们说这个名字在该点是活跃的 基本块的等价 两个基本块计算一组同样的表达式 这些表达式的值分别代表同样的活跃名字的值 有很多等价变换可用于基本块 局部变换 全局变换 9.3 基本块和流

文档评论(0)

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

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档