要给汇编编译器加入符号,首先要明确这个汇编编译器有哪些符号:
预定义符号:SP,LCL等,这些符号预先就在SymbleTable中定义好了对应内存的地址
变量variables:注意,变量是在第二遍读取阶段才依次从地址16开始计算的
标签符号lables:你会在机器码中见到(LOOP)@LOOP 这样的循环代码,这些就是标签代码,之所以要分两遍读取,就是因为(LOOP)这样的标签有可能出现在@LOOP之前,如果只读取一遍的话无法解决这个问题,因此第一遍读取的目的就是把所有标签的地址给确定。而标签的地址,按照书上的说法,是由(XXX)之前总的指令数决定的。
本书作者已经帮我们把问题最简化了,只要分别考虑这三类符号如何表示就能够在nonsymbol编译器的基础上完成这一部分的内容。