Я очень плохо знаком с концепцией написания ассемблера, и даже после прочтения большого количества материала мне все еще трудно обернуть голову вокруг пары понятий.
Каков процесс разбиения исходного файла на токены? Я считаю, что этот процесс называется лексингом, и я искал реальные примеры кода, которые имеют смысл, но я не могу найти такие простые примеры кода, которые очень приветствуются;)
При синтаксическом анализе нужно ли когда-либо передавать информацию вверх или вниз по дереву? Причина, по которой я спрашиваю, заключается в следующем, возьмите:
LD BC, nn
После токенизации его нужно превратить в следующее дерево разбора (???)
___ LD ___
| |
BC nn
Теперь, когда это дерево пройдено, ему нужно создать следующий машинный код:
01 n n
Если бы инструкция была:
LD DE,nn
Тогда результат должен быть:
11 n n
Имеется в виду, что возникает вопрос: возвращает ли узел LD что-то другое в зависимости от операнда или операнд что-то возвращает? И как это достигается? Более простые примеры кода были бы превосходны, если позволяет время.
Меня больше всего интересует изучение некоторых необработанных процессов, а не изучение расширенных существующих инструментов, поэтому имейте это в виду, прежде чем отправлять меня в Yacc или Flex .