计算机系统要素:第七章 虚拟机I:堆栈运算

本章聚焦于使用高级语言实现虚拟机(VM)的文本翻译,特别是堆栈运算。核心概念包括理解HACK机器语言,如@X指令、VM语言中的push和pop操作,以及如何处理涉及jump的语句。学习过程中需关注VM语言到汇编的转换,并解决label冲突问题。关键在于逐步实现和理解每条VM指令在内存中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一章的项目和第六章类似,都是用高级语言实现文本翻译的过程。但是,这一章对于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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值