本章内容:自制一个assembler完成从汇编语言到机器码的翻译。不支持多行注释和错误检查等功能,对于给出的代码都可以正常翻译。
符号翻译使用一张符号表来存储变量和标签。
标签是查找是否存在$(xxx)$的字符串,然后将其存入符号哈希表。
该过程在第一趟遍历完成。
由于代码保证不存在语法错误,在第一次翻译之后去除空格和注释,就只剩下正常的指令了。
可以按照前缀字符解析:
@
表示该指令为A
或者L
,只需要将后续字符在symbol_table
以及variables
中查看即可- 除去
L
指令和A
指令就只剩下C
指令了,只需要按位域解析得到各位域再转换为对应的二进制映射再拼接即可,这个过程查表放在comp
,dest
,jump
哈希表中
该项目由本人于Clion
下采用C++17
和Qt5
开发。
代码放在这里了,如果感兴趣可以看看。