我很新编写汇编的理念和阅读材料的大量后甚至,我仍然有困难包裹我的头围绕一对夫妇的概念。
什么是真正打破了一个源文件为标记的过程? 我相信,这个过程被称为词法,我已经搜查高和低一个真正的代码示例,是有意义的,但我不能找到一个东西,所以简单的代码例子非常欢迎;)
在解析时,就不断需要信息传递向上或向下的树? 我想问的原因如下,采取:
LD BC,NN
它需要变成一次记号化下面解析树(???)
___ LD ___
| |
BC nn
现在,当这个树进行遍历,它需要产生以下的机器代码:
01 n n
如果指令已经:
LD DE,nn
然后输出将需要:
11 n n
这意味着它提出了一个问题,做不同的基础上,操作数的LD节点返回的东西或者是返回的东西操作数? 而这是如何实现的呢? 更简单的代码例子将是极好如果时间允许。
我最感兴趣的是学习一些原始工艺而不是在这里看着先进的现有工具,所以请记住这一点送我去之前Yacc的或柔性 。
那么,你真的想为一个寄存器和存储器寻址模式involing偏移位移和索引寄存器是这样操作的指令树的结构:
INSTRUCTION-----+
| | |
OPCODE REG OPERAND
| |
OFFSET INDEXREG
是的,你要想要传递值向上和向下的树。 一种用于正式指定这样的值传递方式被称为“属性语法”,和你装饰你的langauge语法(在你的情况,你的汇编语法)与传值和对这些值的计算。 欲了解更多的背景,看到在属性文法维基百科 。
在你问相关的问题 ,我讨论的工具, DMS ,它处理的表达语法和建筑树。 由于语言的操作工具,DMS正好面临这些相同的向上和向下的树信息流的问题。 它不应该让你吃惊,作为一个高端的语言操纵的工具,它可以处理直接属性语法计算。
这是没有必要建立一个解析树。 Z80的操作代码是非常简单的。 它们由操作码和0,1或2个操作数,以逗号分隔的。 你只需要到了一个非常简单的解析器拆分操作码为(最多3个)的部件 - 不需要树。
实际上,操作码都没有一个字节的基础,但一个八进制基地。 我所知道的最好的描述了译码Z80操作码 。
文章来源: Writing a Z80 assembler - lexing ASM and building a parse tree using composition?