Как обрабатывать прямые ссылки с помощью псевдооператоров IF в ассемблере - PullRequest
0 голосов
/ 04 сентября 2018

Я пишу ассемблер 6502 на Python и не знаю, как с этим справиться:

Это двухпроходный ассемблер, поэтому он вычисляет символы в первом проходе, а затем заполняет их во втором. Стандартные вещи. Но! Я хочу, чтобы он имел псевдооперацию ".if", где он будет условно выполнять код на основе условия.

Так что мне делать, если псевдооператор .if проверяет символ прямой ссылки, который еще не был определен в первом проходе? Без этого я не смогу правильно расширить код, чтобы выяснить расположение меток для определения символов!

Я подумал, может быть, я смогу одновременно сгенерировать несколько версий таблицы символов на основе того, найдет ли оператор if Истину, и затем решить, какую версию использовать во втором проходе, но это звучит как ужасный ударил по моему выступлению.

1 Ответ

0 голосов
/ 07 сентября 2018

Это на самом деле не ответ на ваш вопрос, а скорее объяснение того, почему вы можете признать поражение с честью.

Обратите внимание на следующее:

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

Какая окончательная сборка? Если бит внутри .if исключен , то условие выполняется, и бит внутри .if должен быть включён . И наоборот, если бит внутри .if включен , условие ложно и .if следует исключить.

Я думаю, что вполне разумно ограничить .if от использования меток, которые определены далее в коде.

...