实验指导书-实验四-目标代码生成1
需积分: 0 67 浏览量
更新于2022-08-08
收藏 26KB DOCX 举报
实验四的目的是让学生深入理解编译器的工作流程,特别是代码生成阶段,这涉及到汇编指令的构造、寄存器分配以及简单的程序优化。在实验中,学生需要将三地址码序列转换成目标汇编指令,这有助于理解如何将高级语言转化为机器能理解的指令。
1. **汇编指令的理解与生成**:实验要求学生熟悉不同类型的汇编指令,例如数据转移指令(如MOV)、算术逻辑操作指令(如ADD、SUB)等,并能根据三地址码序列生成相应的汇编指令序列。例如,给定的赋值语句 `d:=(a-b)+(a-c)+(a-c)` 需要转换为对应的三地址码,再进一步转换为目标汇编指令。
2. **寄存器分配与getreg函数**:`getreg` 函数是实验的关键部分,它负责决定计算结果应存储的位置。当处理 `x:=y op z` 这样的表达式时,首先通过 `getreg` 函数找到一个可用的寄存器或内存位置 `L` 来保存运算结果。函数可能需要考虑寄存器压力,避免过多的寄存器使用和不必要的数据移动。
3. **地址描述符与数据位置**:在确定变量 `y` 的位置时,需要查看其地址描述符来确定其当前状态,是存在于内存还是寄存器中。如果 `y` 同时存在于两者,优先选择寄存器作为 `y'`。若 `y` 的值不在 `L` 中,需要通过 `MOV` 指令将 `y` 的值加载到 `L`。
4. **指令生成**:生成 `op z', L` 指令来执行实际的操作,其中 `z'` 是 `z` 当前所在的位置之一。这一步确保了操作数正确参与运算。
5. **寄存器管理**:在操作完成后,如果 `y` 和/或 `z` 的值不再被后续引用,且在块出口处也不活跃,可以释放它们占用的寄存器资源,更新寄存器描述符表示这些寄存器不再包含 `y` 和/或 `z` 的值。
6. **优化与程序开销**:实验还鼓励进行部分优化,减少指令数量和程序的运行时间。优化后,需要比较优化前后的程序开销,并进行量化评估。
7. **实验报告**:报告应包括生成的汇编代码序列,优化效果的分析,以及代码生成器的流程图,以展示对整个过程的理解。
8. **附加功能**:将四个实验整合成一个完整的编译器程序,能够完成词法分析、语法分析、语义分析到目标代码生成的全过程,这是一项高级任务,需要深入理解编译器的每个阶段,并编写相应的文档说明。
这个实验不仅锻炼了学生的编程技能,更加强了他们对编译器工作原理的理论理解,为未来深入学习系统级编程和软件开发奠定了坚实的基础。
透明流动虚无
- 粉丝: 41
- 资源: 306
最新资源
- ASK、PSK、FSK 调制和 BER 与 SNR 计算matlab代码.rar
- AWGN + Rayleigh衰落信道的模拟Matlab代码.rar
- AWGN 和瑞利无线信道的 BPSK BER vs SNR 仿真Matlab代码.rar
- AWGN 信道的 BPSK BER vs SNR Matlab仿真.rar
- ASK调制Simulink模型.rar
- AWGN信道上的OFDM性能(理论与Matlab仿真).rar
- AWGN信道中16QAM的符号误码率Matlab代码.rar
- AWGN 信道中 16QAM 的符号错误率Matlab代码.rar
- 视频编码复杂度受限时H.265/HEVC的率失真优化算法研究
- HEVC高效帧间预测模式决策方法降低运动估计复杂度
- BASK调制和解调Matlab代码.rar
- BER与SNR对CDMA高斯噪声的2用户系统Matlab代码.rar
- BCH解码器和编码器Matlab代码.rar
- BER与信噪比(SNR)曲线图,用于8-ary QAM附Matlab代码.rar
- Boc & C_A多径误差包络Matlab代码.rar
- BPSK _ MQAM _ MPSK 具有所有调制的理论BER附Matlab代码.rar