编译原理原理与技术-陈意云-第7章 代码生成和代码优化.pptVIP

编译原理原理与技术-陈意云-第7章 代码生成和代码优化.ppt

  1. 1、本文档共105页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 例 题 5 while E1 do S1 当它们嵌套时,代码结构变成 L2: E1的代码 L2: E1的代码 真转 L4 真转 L4 无条件转 L3 无条件转 L3 L4: S1的代码 L4: E2的代码 JMP L2 假转 L5 L3: S2的代码 if E2 then S2 L5: JMP L2 E2的代码 L3: 假转 L5 S2的代码 L5: 可优化为假转 例 题 5 一个C语言程序 main() { long i,j; ? while (i) { if (j) { i = j; } } } 优化编译的汇编码见右边 pushl %ebp movl %esp,%ebp .L7: testl %eax,%eax je .L3 testl %edx,%edx je .L7 movl %edx,%eax jmp .L7 .L3: 例 题 6 UNIX 下的C编译命令cc的选择项g和O的解释如下, 其中 dbx的解释是“dbx is an utility for source-level debugging and execution of programs written in C”。试说明为什 么用了选择项g后,选择项O便被忽略。 -g Produce additional symbol table information for dbx(1) and dbxtool(1) and pass -lg option to ld(1) (so as to include the g library, that is: /usr/lib/libg.a). When this option is given, the -O and -R options are suppressed. -O[level] Optimize the object code. Ignored when either -g, -go, or -a is used. ... 例 题 7 一个C语言程序如下,右边是优化后的目标代码 main( ) pushl %ebp { movl %esp,%ebp int i, j, k; movl $1,%eax -- j=1 i=5; movl $6,%edx -- k=6 j=1; L4: while (j100) { addl %edx,%eax -- j=j+6 k=i+1; cmpl $99,%eax j=j+k; jle .L4 -- while(j?99) } } 完成了哪些优化? 例 题 7 一个C语言程序如下,右边是优化后的目标代码 main() pushl %ebp { movl %esp,%ebp int i,j,k; movl $1,%eax -- j=1 i=5; movl $6,%edx -- k=6 j=1; L4: while(j100){ addl %edx,%eax -- j=j+6 k=i+1; cmpl $99,%eax j=j+k; jle .L4 -- while(j?99) } 复写传播、常量合并、代码外提、删除无用赋值 } 对i,j和k分配内存单元也成为多余,从而被取消 例 题 8 求最大公约数的函数 long gcd(p,q) long p,q; { if (p%q == 0) return q; else return gcd(q, p%q); } ? 其中的递归调用称为尾递归 ?

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档