我有兴趣为一个爱好项目编写一个x86汇编程序.
起初它对我来说似乎相当直接,但我读到的越多,我发现自己遇到的问题就越多.我并非完全缺乏经验:我已经使用了相当数量的MIPs汇编,并且我已经为学校的C子集编写了一个玩具编译器.
我的目标是编写一个简单但功能强大的x86汇编程序.我不打算建立一个商业上可行的汇编程序,而只是一个业余爱好项目,以加强我在某些领域的知识.所以我不介意我是否没有实现所有可用的功能和操作.
我有很多问题,例如:我应该使用一次通过还是两次通过?我应该使用ad-hoc解析还是定义正式语法并使用解析器生成器来执行我的指令?在什么阶段,我如何解决我的符号的地址?
鉴于我的要求,有人可以建议我在宠物项目汇编程序中使用的方法的一般指导原则吗?
我对编写汇编程序的概念非常陌生,即使在阅读了大量材料之后,我仍然难以绕过几个概念.
将源文件实际分解为令牌的过程是什么?我相信这个过程叫做lexing,我已经搜索了一些有意义的实际代码示例,但我找不到一个如此简单的代码示例非常受欢迎;)
在解析时,是否需要在树上向上或向下传递信息?我问的原因如下,采取:
LD BC,nn
一旦标记化(???),它需要变成以下的解析树
___ LD ___
| |
BC nn
Run Code Online (Sandbox Code Playgroud)
现在,当遍历此树时,它需要生成以下机器代码:
01 n n
Run Code Online (Sandbox Code Playgroud)
如果说明是:
LD DE,nn
Run Code Online (Sandbox Code Playgroud)
然后输出需要是:
11 n n
Run Code Online (Sandbox Code Playgroud)
这意味着它提出了问题,LD节点是否根据操作数返回不同的东西,或者它是返回某些东西的操作数?这是如何实现的?如果时间允许,更简单的代码示例将是非常好的.
我已经搜索了这个术语,并且只能找到一些参考文献,但我已经多次提到了它.这些参考文献似乎都不具有"权威性".
最近我可以说,"ad-hoc解析"涉及将输入分成块并处理这些块.也许这是正确的,我不知道.
有人可以帮助我找到一些资源来解释更完整的临时解析吗?该术语的起源是什么(来自学术界等)?什么是临时解析的例子?
如果您上网并下载 asm 汇编程序。它是由什么制成的。它使用什么文件类型?汇编程序本身是如何创建的?