如何在汇编器中使用IF伪操作处理前向引用

时间:2018-09-04 02:18:47

标签: python python-3.x assembly 6502

我正在用Python编写6502汇编器,但不知道如何处理:

这是一个两遍汇编器,因此它会在第一遍中找出符号,然后在第二遍中填充它们。标准的东西。但!我希望它具有一个“ .if”伪操作,它将根据条件有条件地执行代码。

那么如果.if伪op正在测试尚未在第一遍中定义的前向引用符号,该怎么办?没有它,我将无法正确扩展代码以找出标签的位置来确定符号!

我当时在想,也许我可以根据if语句是否找到True来模拟生成符号表的多个版本,然后决定在第二遍中使用哪个版本,但这听起来像很糟糕影响了我的表现。

1 个答案:

答案 0 :(得分:4)

这实际上不是您的问题的答案,更多地说明了为什么您可以原封不动地接受失败。

请考虑以下内容:

.org $400
label1: nop
.if label2 - label1 == 1
        nop
.endif
label2: nop

最后的组装是什么?如果.if内的位被排除在外,则条件为真,并且.if内的位应被包括在中。相反,如果.if内的位被包括,则条件为假,应排除.if

我认为限制.if使用代码下方定义的标签是完全合理的。