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

下载本文档

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

文档简介

1、Evaluation Warning: The document was created with Spire.Doc for .NET. 实验八 目标程序生成【实验目的】 了解目标代码生成阶段在编译处理过程中的功能和作用 了解常常用的三三种目标标代码形形式及其其优缺点点 了解虚虚拟机及及其指令令系统 深入理理解并掌掌握有中中间代码码向目标标代码转转换的过过程和原原理 【实验学时时】 4学时 【实验要求求】 熟练掌掌握虚拟拟机的指指令系统统 理解并并掌握指指令选择择的方法法 理解多多寄存器器分配的的原则和和方法 熟练掌掌握基本本语句从从四元式式中间代代码形式式到目标标代码的的翻译原原理和方方法

2、 独立完完成目标标代码生生成程序序【实验原理理】一、四元式式到目标标代码的的转换分分析1取ARRG结构构值对应应的目标标代码四元式中间间代码的的操作分分量和目目标量以以 ARRG结构构给出,在在生成目目标代码码的过程程中,首首先要根根据ARRG结构构取得对对应的值值或者地地址,存存入累加加寄存器器ac中中,再生生成运算算的目标标代码。从从ARGG结构取取值的过过程如下下表所示示: AARG结结构种类类 取值值对应的的目标代代码常量c LDCC,acc,c,00 标号llab LDCC,acc,laab,00 源变量或或临时变变量v直接变量取v的绝对对地址到到ac; (表-22)LD,acc,0

3、,aac间接变量取v的绝对对地址到到ac; (表-22)LD,acc1,00,acc LDD,acc,0,aac1取ARG结构值对应的目标代码示意表 取ARG结构值对应的目标代码示意表 2取变量量的绝对对地址对对应的目目标代码码如下表表所示: 变量种种类 取绝对对地址对对应的目目标代码码 源变量v LDAA,acc,leevell,diispllayooff ADDD,acc,acc,spp LDCC,acc1,ooff,00 ADDD,acc,acc ,aac1注:levvel为为变量vv所在的的层数,ooff为为变量vv的偏移移。 临时变量tt LDCC,acc1,ooff,00 ADDD

4、,acc,spp,acc1注:offf为临时时变量tt的偏移移量 取变量的绝对地址对应的目标代码示意表 取变量的绝对地址对应的目标代码示意表二、关键问问题的处处理1 标标号和跳跳转的处处理:处处理标号号和跳转转,需要要用到标标号地址址表;表表的结构构为: 中间间代码标标号 目标代代码地址址 下一一项 Labbeldestnnumnext(1) 遇遇到标号号定位时时:设标标号为LL,应转转向的目目标代码码为p11,分为为两种情情况:在标号地址址表中没没有L项项,则填填写表项项(L,pp1,NNULLL),并并链入表表尾;在标号地址址表中有有L项(L,aaddrr,Neext),则根根据当前前pc

5、,回回填adddr对对应的目目标代码码。(2) 遇遇到跳转转代码时时:设要要跳到的的标号为为L,这这条语句句对应的的目标地地址为pp2,分分为两种种情况:在标号地址址表中没没有L项项,则构构造一个个表项(L,pp2,NNULLL),链链入表尾尾;在标号地址址表中有有L项(L,pp1,nnextt),则则从中取取出L的的代码地地址p11,直接接生成目目标代码码。2形实参参结合的的处理:(1) 形形参为值值参: 实参是常数数值:将将常数值值送入相相应存储储单元; 实参是直接接变量:找到变变量的存存储地址址,取值值,送相相应存储储单元;实参是间接接变量:此时变变量的存存储单元元存放的的是地址址。找到

6、到变量的的存储地地址,取取内容作作为地址址,再取取内容,得得到实参参值,送送相应存存储单元元;(2) 形形参为变变参:这这时实参参必须是是变量,长长度为11。实参是直接接变量:应将实实参变量量的地址址送入形形参单元元;找到到变量的的存储地地址,送送相应存存储单元元;实参是间接接变量:要送实实参变量量单元的的内容;找到变变量的存存储地址址,取内内容,送送相应存存储单元元。3 过程程调用的的工作分分配:由于过程调调用中的的有些工工作是相相同的,如如果都放放在调用用语句处处处理,当当一个过过程被多多个过程程调用时时,就要要重复很很多目标标代码。从从语法树树生成目目标代码码时,所所有过程程调用的的处理

7、工工作都必必须放在在调用语语句处进进行处理理。而从从中间代代码生成成目标代代码时,由由于有过过程入口口和过程程出口中中间代码码的存在在,我们们就可以以把有些些工作安安排在子子程序的的入口和和出口处处完成。这这样,过过程调用用中的整整个工作作(除过过程体的的执行部部分)可可分配到到过程调调用处,过过程入口口处和过过程出口口处。这这样就可可以节省省一些目目标代码码。具体体分配如如下:过程调用代代码完成成:保存旧旧的diispllay表表的偏移移量;设置新的ddispplayy表的偏偏移;保存返回地地址;转向过程入入口。过程入口处处完成: 保存ssp值; 保存层层数; 保存累累加寄存存器的内内容,aac,aac1,aac2 构造NNewAAR的DDispplayy表;修改sp和和topp值:ssp:=topp ;ttop:= ttop+NewwAR.Sizze过程出口处处完成: 恢复寄寄存器的的内容;恢复sp和和topp的值:topp:=ssp;ssp:=CurrrenntARR.spp;取出返回地地址,返返回。【实验步骤骤

温馨提示

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

评论

0/150

提交评论