这一章的项目和第六章类似,都是用高级语言实现文本翻译的过程。但是,这一章对于VM语言和汇编语言的理解要求较上一章要高得多。所以这一章的学习要点在于,充分理解VM语言实现过程中计算机内存所做的每一个步骤。
HACK机器语言要点复习:
1,@X的意义为把X存入A寄存器,M代表的是Memory[A],即A所代表的地址中所存的数值,A=MM=D两句并列意味着将D中数据存入Memory[A],这是这一章中用得最多的逻辑语句。
2,在实现eq,gt,lt时,需要用汇编语言实现If的选择功能,这里需要用到两个lable,一个有条件jump,一个无条件jump,代码实现为:
// Compare R1=R2 set result in R3
@SP
M=M-1
A=M
D=M
@SP
M=M-1
A=M
D=D-M
@RET_TRUE
D;JEQ
D=0 // need to return False
@CONTINUE
0;JMP
(RET_TRUE)
D=-1 // need to return True
(CONTINUE)
@SP
A=M
M=D
@SP
M=M+1
学习步骤:
1,按照书中7.5所推荐的实现顺序依次实现5个vm文件的转化。
2,对于每一个文件,先在VMEmulator中运行.vm文件和xxxxVME.tst,通过观察其每一步是如何实现的,深入理解VM语言中push,pop和各个参数的实际意义。
3,自己手写相关的HACK机器语言代码,一定要从简到繁,从push constant这种最简单的语句开始一步一步来。
4,将转换过程用高级语言实现,测试并修改
注意点:
1,第七章中的机器语言和第六章中的机器语言在结构上略有不同,这一章中的语言更加向高级语言靠拢,在有些地方显得“啰嗦”,例如,push constant 7这么一句话,需要@7 D=A