没有合适的资源?快使用搜索试试~ 我知道了~
目标代码生成器参照.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 142 浏览量
2021-12-21
13:38:35
上传
评论
收藏 173KB PDF 举报
温馨提示
试读
9页
目标代码生成器参照.pdf
资源推荐
资源详情
资源评论
实验报告
实验课名称: 编译原理实验
实验名称: 目标代码生成器实验
班级: 学号: : 时间: 2016-4-30
一、问题描述
代码生成器着重考虑两个问题 : 一是如何使生成的目标代码较短; 另一个是
如何充分利用电脑的寄存器, 减少目标代码中访问存储单元的次数。 这两个问题
直接影响代码的执行速度。其中基本问题 :所有代码生成器都要面对何种中间代
码输入 , 〔是逆波兰式,四元式,还是三元式?等问题〕何种代码做为目标程序 ,
选择适当的代码指令 ,最优的寄存器分配方案 ,和计算顺序等基本问提
二、数据结构设计
逆波兰式 目标代码 ,采用堆栈。
char x1,x2; /* 从语义栈中弹出俩个操作数,用于判断与运算 */
x2=SEM.top(); /* SEM.top 记得后面要加 (),否则没有值 !!! */
cout<<x2<<endl; /* 用于调试用的,看栈是怎样变化的 */
SEM.pop();
x1=SEM.top();
cout<<x1<<endl;
SEM.pop();
三、算法设计
代码生成算法:
对每个四元式 : i: A:=B op C,依次执行:
1. 以四元式 : i: A:=B op C 为参数,调用函数过程 GETREG(i: A:=B op C) ,
返回一个寄存器 R,用作存放 A 的寄存器。
2. 利用 AVALUE[B] 和 AVALUE[C] ,确定 B 和 C现行值的存放位置 B’和 C’。
如果其现行值在寄存器中,则把寄存器取作 B’和 C’
3. 如果 B’≠R,则生成目标代码:
LD R, B’
op R, C’
否则生成目标代码 op R, C ’
如果 B’或 C’为 R,则删除 AVALUE[B] 或 AVALUE[C] 中的 R。
4. 令 AVALUE[A]={R}, RV ALUE[R]={A} 。
5. 假设 B 或 C 的现行值在基本块中不再被引用, 也不是基本块出口之后的
活跃变量, 且其现行值在某寄存器 Rk 中,则删除 RVALUE[Rk] 中的 B 或 C 以及
AVALUE[B] 或 AVALUE[C] 中的 Rk ,使得该寄存器不再为 B 或 C 占用。
资源评论
dtd13961139571
- 粉丝: 1
- 资源: 6万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功