计算机基础系列 —— 汇编器

"The Analytical Engine might act upon other things besides numbers... Suppose, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition were susceptible of such expression and adaptations... If so, the engine might compose elaborate and scientific pieces of music of any degree of complexity." ------ Ada Lovelace(诗人拜伦的女儿在 1840 年的看法)

文中提到的所有实现都可以参考:nand2tetris_sol,但是最好还是自己学习课程实现一遍,理解更深刻。

之前的文章介绍了 Hacker 和汇编语言,如果要让汇编语言运行在 Hacker 上,我们还需要一个汇编器程序,把汇编语言翻译成机器语言,才能使得汇编语言运行。

A 指令

C 指令

如上图,A 指令和 C 指令的翻译很简单。每条指令都可以一对一翻译成 16-bits 的 01 串。

空格、注释和缩进

汇编器直接忽略掉就好。

符号

预定义符号

这里有些符号在后面的文章里会用到,对于预定义符号直接把 symbol 替换成 value,就和上面的指令翻译是一样的了。

标签符号

标签符号对应的 value 就是和标签相邻的下一条指令的行数,对应的就是 ROM 里的指令行数。

变量符号

变量符号就简单一些,除了预定义的 15 个变量,新定义的变量从 RAM[16] 依次存储,变量的映射关系存储在汇编器的 Symble table 里,如下图:

接下来我们就可以用自己喜欢的语言 Python、C++ etc... 实现按上面的过程实现这个汇编器啦,实际上最早的汇编器使用机器语言写的,重要的不是用什么语言写汇编器,重要的是理解汇编器的核心思想 ------ 把指令集翻译成机器语言。

后面的文章,我们还会实现自己的操作系统,高级语言,VMCode Translator。

相关推荐
肆忆_4 小时前
刨根问底:从反汇编看 C++ 对象的生与死
汇编语言
谷公子的藏经阁5 小时前
讲个AXI死锁场景
cpu·axi·死锁·deadlock·axi2ahb
Trouvaille ~12 小时前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组
_OP_CHEN14 小时前
【Linux系统编程】(二十九)深度解密静态链接:从目标文件到可执行程序的底层魔法
linux·操作系统·链接·文件系统·c/c++·静态链接
_OP_CHEN1 天前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
肆忆_1 天前
手搓 VM 复盘:从我的 C++ 并发 GC 到字节 PrimJS 的架构演进
操作系统
c++逐梦人1 天前
Linux基础IO
linux·操作系统·io
凉、介2 天前
VMware 三种网络模式(桥接 / NAT / Host-Only)原理与实验解析
c语言·网络·笔记·操作系统·嵌入式·vmware
驱动探索者2 天前
U盘发展史
网络·cpu·u盘
小白狮ww2 天前
要给 OCR 装个脑子吗?DeepSeek-OCR 2 让文档不再只是扫描
人工智能·深度学习·机器学习·ocr·cpu·gpu·deepseek