我需要为我构建的CPU架构构建汇编程序.该体系结构与MIPS类似,但这并不重要.
我开始使用C#,虽然C++更合适.(C#意味着我的开发时间更快).
我唯一的问题是我不能为这个应用程序提供一个好的设计.我正在构建一个2通道汇编程序.我知道每次传球我需要做什么.
我已经实现了第一遍,我意识到如果我必须在同一行上汇编汇编代码......没有抛出错误.这意味着只有一个糟糕的解析技术.
如此全能的程序员,汇编的父亲启发我如何进行.我只需要支持符号和数据声明.说明书有固定的大小.
如果您需要更多信息,请与我们联系.
我写了三四个简单的汇编程序.在不使用解析器生成器的情况下,我所做的就是模拟我最熟悉6502 的SC汇编器.
为此,我使用了一个简单的语法 - 一行是以下之一:
nothing [label] [instruction] [comment] [label] [directive] [comment]
标签是一个字母,后跟任意数量的字母或数字.
指令是
指令是
评论是*到最后一行.
操作数取决于指令和指令.
包含.EQ的指令等同于定义常量
.OR设置代码的原始地址
.HS十六进制字节串
.AS ascii字节字符串 - 除了空格之外的任何分隔符 - 无论什么开始它结束它
.TF输出目标文件
.BS n保留n个字节的块存储
当我写它时,我为每个组件编写了简单的解析器.每当我遇到标签时,我都会把它放在一个带有目标地址的表中.每当我遇到一个我不知道的标签时,我将指令标记为不完整,并将未知标签与对需要修复的指令的引用放在一起.
在所有源代码行通过之后,我查看了"修复"表并尝试在符号表中找到一个条目,如果我这样做,我修补了说明.如果没有,那就是错误.
我保留了一个指令名表和操作数的所有有效寻址模式.当我收到指令时,我试图依次解析每个寻址模式,直到有效.
鉴于这种结构,整个事情应该花费一天或两天.