计算机系统要素--第六章,02-HACK汇编编译器实现

从零开始构建现代计算机--第六章,02-HACK汇编编译器实现

要点

关心三点:
A指令,C指令,符号表

A-指令

A指令:将@num的num转为16位的二进制数即可

C-指令

C指令:分成四部分,固定的开头"111"(C指令标志),comp域(执行什么运算),dest域(计算结果的输出位置),jump域(是否跳转)

符号表

符号表保存的有编译器预定义的符号,以及汇编代码中自定义的标签和变量的地址

  1. 预定义符号:符号表初始化就添加

  2. 自定义标签和变量
    标签的entry在第一趟添加到符号表中
    变量的entry在第二趟添加到符号表中,变量定义就是在符号表中建立一个entry,这就是为什么变量的定义要先于它的使用

标签涉及控制流程,用来进行地址跳转, 是A指令,
标签定义如(LOOP),用法是@LOOP
第一趟遇到(LOOP)要将标签加入符号表中,加的entry是下一条指令的位置,
第二趟忽略(LOOP),遇到@LOOP时取出entry,转为二进制数即是A指令的汇编代码

python实现

可以参考github上一个哥们的python代码
这份代码不是可重定位的,因为变量分配的起始地址固定为了16

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值