编译原理 代码生成

一次就生成汇编代码的话,工作量巨大,很多都是靠多次最终才能生成。

资源:

寄存器:32个

数据区:全局变量

代码区:汇编 二进制代码

堆区:动态分配

栈区:函数返回

栈式计算机

load 将元素从内存中加载到栈顶

 

 

栈式计算机因为每条指令的语义都比较简单

伪指令:机器读取指令时,就会为这几个变量分配空间,存储到内存中。

需要注意的是,分配空间时,没有值,通过从栈中弹出数据,store才有的值。

面向栈计算机:

  

递归下降:语法分析算法:函数分析函数;而此处是代码生成函数

因为是后计算的Gen_E(e2) e2的值会在栈顶,而后是e1,e1与e2计算之后的结果也存在栈顶。

 

语句的代码生成:栈的规模不变!

实际上是在做后序遍历(与语义分析的顺序相同)

T:类型

D:变量声明

最后的Gen_D 是因为会存在连续的声明

总体是Gen_P,而后是Gen_D,Gen_S

寄存器计算机:

risc就是寄存器计算机

假设有无限多个的时候,没有溢出。

movn:立即数

load store 【】:访存

需要注意Gen_E的返回值是一个寄存器;

 

 

加法左结合

中间就是抽象语法树,使用后序遍历递归生成汇编代码

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值