计算机要素--第六章 汇编编译器

计算机系统要素,从零开始构建现代计算机(nand2tetris)
如果完成了本书所有的项目 你将会获得以下成就

  • 构建出一台计算机(在模拟器上运行)
  • 实现一门语言和相应的语言标准库
  • 实现一个简单的编译器

而且,这本书的门槛非常低,只要你能熟练运用一门编程语言即可。本课程综合了数字电路,计算机组成原理,计算机体系架构,操作系统,编译原理,数据结构等的主要内容,搭建了计算机平台的构建的框架,并未深入细节,如果需要了解细节,可由本书作为主线,逐步完善的知识体系。

QQ交流群(含资料):39014053
课程连接
项目地址Github


本章要实现的内容

详细内容

对于本项目而言,最困难的就是允许汇编程序使用符号来指代内存地址。 而允许汇编程序使用符号来指代内存地址却又是方便编程,提高程序可读性的一种重要的方法。而由于符号化汇编命令与其对应的二进制代码之间的关系是很简单的,所以编写汇编编译器并非是很难的任务。汇编编译器的功能并不复杂,汇编编译器对每个汇编命令的所有部分进行解析,将每个部分翻译成它对应的二进制码,并将生成的二进制码汇编成真正能被硬件执行的二进制指令。
这里给出了一种可行的实现方案: 这里提出一个基于4个模块的汇编编译器的实现:语法分析器模块用来对输入文件进行语法分析;编码模块用来提供所有汇编命令所对应的二进制代码;符号表模块用来处理符号;另外还有一个主程序用来驱动整个编译过程。

  • Parser(语法分析器模块):本模块主要做的就是对命令进行获取,进行类型判断,获取符号(预定义符号,标记命令,变量)
  • Code(编码模块):将Hack汇编语言助记符翻译成二进制码。
  • 符号表模块:符号表用于建立和维持符号与其地址之间的关联。常用的有哈希表。
  • 无符号程序的汇编编译器:这种情况意味着不用处理符号,所以只有两个阶段,第一阶段翻译无符号汇编程序,然后将其扩展成具有符号处理能力的汇编编译器。
  • 有符号程序的汇编编译器:使用两次读取代码的方式来实现,第一遍构建符号表,但不翻译程序;第二遍翻译程序,并把符号变成地址。

具体的实现参考课程或者是课本。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值