将三地址代码转为指令
最后更新于:2022-04-02 04:08:29
[TOC]
## ASSIGN 赋值语句
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/66/f3/66f39ec2bec638e5ec00cc0e394beccd_800x406.png)
通过 `var a = 3 * 4` 与 `var b = a + 1`
- 生成一个符号表,存放变量,offset标识索引
- 再生成一个静态符号表,存放数值
汇编说明
```
#var a = 3*4
LW S0 STATIC 0 // 从静态符号表获取 Offset=0,赋值给 s0,
// LW标识从内存中读取给寄存器
LW S1 STATIC 1 // 从静态符号表获取 Offset=1,赋值给 s1
MULT S0 S1 // MULT 标识 S0 与 S1 相乘
// 如果两个32位相乘,会产生64位(一个低位,和一个高位),所以需要存放到两个寄存器中,地位存入 L0,高位存入xxx
MFLO S2 // MFLO 把LO的存入S2, 既计算结果S2
SW S2 SP 0 // SW 把值存入内存, 把S2的值存入内存中,
// SP(寄存器)的第0个位置指总是指向栈指针的当前活动记录表
# var b= a
LW S0 SP 0 // 在把 a 的值赋值给 S0
LW S1 STATIC 2
ADD S2 S0 S1
SW S2 SP 1
```
';