构建汇编程序

我需要为我构建的CPU架构构建汇编程序。 该体系结构与MIPS类似,但这并不重要。

我开始使用C#,虽然C ++更合适。 (C#意味着我的开发时间更快)。

我唯一的问题是我不能为这个应用程序提供一个好的设计。 我正在建立一个2通道汇编程序。 我知道每次传球我需要做什么。

我已经实现了第一遍,我意识到如果我必须在同一行上汇编汇编代码……没有抛出错误。这意味着只有一个糟糕的解析技术。

所以全能的程序员,汇编的父亲告诉我如何进行。 我只需要支持符号和数据声明。 说明书有固定的大小。

如果您需要更多信息,请与我们联系。

我写了三四个简单的汇编程序。 在不使用解析器生成器的情况下,我所做的是为我最熟悉6502的SC汇编器建模。

为此,我使用了一个简单的语法 – 一行是以下之一:

nothing [label] [instruction] [comment] [label] [directive] [comment] 

标签是一个字母,后跟任意数量的字母或数字。

指令是 [operands]

指令是 .XX [operands]

评论是*到最后一行。

操作数取决于指令和指令。

包含.EQ的指令等同于定义常量

.OR设置代码的原始地址

.HShex字节串

.AS ascii字节串 – 除了空格之外的任何分隔符 – 无论是什么开始它都结束了它

.TF输出目标文件

.BS n保留n个字节的块存储

当我写它时,我为每个组件编写了简单的解析器。 每当我遇到标签时,我都会把它放在一个带有目标地址的表中。 每当我遇到一个我不知道的标签时,我将指令标记为不完整,并将未知标签与对需要修复的指令的引用放在一起。

在所有源代码行通过之后,我查看了“修复”表并试图在符号表中找到一个条目,如果我这样做,我修补了说明。 如果没有,那就是错误。

我保留了一个指令名表和操作数的所有有效寻址模式。 当我收到指令时,我试图依次解析每个寻址模式,直到有效。

鉴于这种结构,整个过程应该花费一天或两天。

看看Randy Hyde着名的“汇编语言艺术”作者的汇编开发工具包:

汇编程序开发人员套件

双遍汇编程序的第一遍组装代码并为符号放置占位符(因为在运行汇编程序之前,您不知道所有内容都有多大)。 第二遍填写地址。 如果随后需要将汇编代码链接到外部引用,则这是同名链接器的工作。

如果您要编写一个只能工作的汇编程序,并将一个hex文件吐出来加载到微控制器上,它可以简单易行。 我的ciforth库的一部分是一个完整的Pentium汇编器,用于添加大约150行的内联定义。 有一个用于808的十几行的汇编程序。

该原则在http://home.hccnet.nl/awmvan.der.horst/postitfixup.html中解释。 这相当于将黑板设计模式应用于问题。 首先放下指令,为任何和所有操作数留下漏洞。 然后在遇到参数时填写孔。
通用工具和指令集之间存在严格的分离。

如果您需要的汇编程序仅供您自己使用,并且没有任何要求而不是可用性(不是作业),您可以在http://home.hccnet.nl/awmvan.der.horst/forthassembler中进行示例实现。 HTML 。 如果您不喜欢Forth,Perl中还有一个示例实现。 如果奔腾指令集过于咀嚼,那么您仍然必须能够理解原理和通用部分。 建议您首先查看asi8080.frt文件。 这是389 WOC(代码字,而不是代码行)。 熟悉指令集的经验丰富的Forther可以在晚上制作出像这样的汇编程序。 奔腾是一个婊子。