实验目
•解目标代码生成阶段编译处理程中功作
•解常三种目标代码形式优缺点
•解虚拟机指令系统
•深入理解掌握中间代码目标代码转换程原理
实验学时
4学时
实验求
•熟练掌握虚拟机指令系统
•理解掌握指令选择方法
•理解存放器分配原方法
•熟练掌握根语句四元式中间代码形式目标代码翻译原理方法
•独立完成目标代码生成程序
实验原理
四元式目标代码转换分析
1.取ARG结构值应目标代码
四元式中间代码操作分量目标量 ARG结构出生成目标代码程中首先根ARG结构取应值者址存入累加存放器ac中生成运算目标代码ARG结构取值程表示:
ARG结构种类
取值应目标代码
常量c
LDCacc0
标号lab
LDCaclab0
源变量时变量v
直接变量
取v绝址ac (表2)
LDac0ac
间接变量
取v绝址ac (表2)
LDac10ac
LDac0ac1
取ARG结构值应目标代码示意表
2.取变量绝址应目标代码表示:
变量种类
取绝址应目标代码
源变量v
LDAacleveldisplayoff
ADDacacsp
LDCac1off0
ADDacac ac1
注:level变量v层数off变量v偏移
时变量t
LDCac1off0
ADDacspac1
注:off时变量t偏移量
取变量绝址应目标代码示意表
二关键问题处理
1. 标号跳转处理:处理标号跳转需标号址表表结构:
中间代码标号 目标代码址 项
Label
destnum
next
(1) 遇标号定位时:设标号L应转目标代码p1分两种情况:
Ø 标号址表中没L项填写表项(Lp1NULL)链入表尾
Ø 标号址表中L项(LaddrNext)根前pc回填addr应目标代码
(2) 遇跳转代码时:设跳标号L条语句应目标址p2分两种情况:
Ø 标号址表中没L项构造表项(Lp2NULL)链入表尾
Ø 标号址表中L项(Lp1next)中取出L代码址p1直接生成目标代码
2.形实参结合处理:
(1) 形参值参:
Ø 实参常数值:常数值送入相应存储单元
Ø 实参直接变量:找变量存储址取值送相应存储单元
Ø 实参间接变量:时变量存储单元存放址找变量存储址取容作址取容实参值送相应存储单元
(2) 形参变参:时实参必须变量长度1
Ø 实参直接变量:应实参变量址送入形参单元找变量存储址送相应存储单元
Ø 实参间接变量:送实参变量单元容找变量存储址取容送相应存储单元
3. 程调工作分配:
程调中工作相果放调语句处处理程程调时重复目标代码语法树生成目标代码时程调处理工作必须放调语句处进行处理中间代码生成目标代码时程入口程出口中间代码存工作安排子程序入口出口处完成样程调中整工作(程体执行局部)分配程调处程入口处程出口处样节省目标代码具体分配:
Ø 程调代码完成: 保存旧display表偏移量
设置新display表偏移
保存返回址
转程入口
Ø 程入口处完成: 保存sp值
保存层数
保存累加存放器容acac1ac2
构造NewARDisplay表
修改sptop值:sptop top top+NewARSize
Ø 程出口处完成: 恢复存放器容
恢复sptop值:topspspCurrentARsp
取出返回址返回
实验步骤
1. 熟悉虚拟机TM指令系统
2. 根中间代码指令目标代码指令间应关系实验七中生成中间代码程序映射目标代码程序
3. 进行指令选择优化
4. 进行存放器分配优化
5. 生成虚拟机运行高效目标代码程序
6. 文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档