我正在用 Python 编写一个 6502 汇编器,但不知道如何处理这个问题:
它是一个两遍汇编器,因此它在第一遍中计算出符号,然后在第二遍中填充它们。标准的东西。但!我希望它有一个“.if”伪操作,它将根据条件有条件地执行代码。
那么,如果 .if 伪操作正在测试尚未在第一遍中定义的前向引用符号,我该怎么办?没有它,我无法正确扩展代码来找出标签的位置来确定符号!
我在想也许我可以根据 if 语句是否找到真相来同时生成符号表的多个版本,然后决定在第二遍中使用哪个版本,但这听起来很糟糕 em> 影响了我的表现。
最佳答案
这并不是对你问题的真正回答,更多的是解释为什么你可以完好无损地承认失败。
考虑以下因素:
.org $400
label1: nop
.if label2 - label1 == 1
nop
.endif
label2: nop
最后的组装是什么?如果 .if
内的位被排除,则条件为 true,并且 .if
内的位应包含嗯>。相反,如果包含 .if
内的位,则条件为 false,并且应排除 .if
。
我认为限制 .if
使用代码中进一步定义的标签是完全合理的。
关于python - 如何在汇编器中使用 IF 伪操作处理前向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52157961/