一次就生成汇编代码的话,工作量巨大,很多都是靠多次最终才能生成。
资源:
寄存器: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的返回值是一个寄存器;
加法左结合
中间就是抽象语法树,使用后序遍历递归生成汇编代码