Создание дерева с помощью сборки микроконтроллера HCS12 Lang
Я хочу сделать вставку в двоичное дерево поиска на языке ассемблера микроконтроллера HCS12. Сначала я получаю значения, и они находятся в определенных адресах. Например; позвольте мне предположить, что приведенные числа 5-3-8-9-1, соответственно. И позвольте мне предположить, что мы начинаем с 300-го адреса. Таким образом, адрес номеров 301,302,303,304,305; соответственно. Согласно этому бинарному дереву поиска; мы можем понять, что 5 является корнем, 3 является левым дочерним элементом 5, 8 является правым дочерним элементом 5, 9 является правым дочерним элементом 9, а 1 является левым дочерним элементом 1. В результате получается соответствующее дерево. 5 / \ 3 8 / \ 1 9
Теперь я хочу написать ассемблерный код для хранения как значений, так и адресов своего eft и правого потомка. Результат моей программы должен записать следующий вывод в память: (первое значение)(адрес его левого ребенка)(адрес его правого ребенка)(второе значение)(адрес его левого ребенка)(адрес его правого ребенка) .......
Таким образом, согласно этому; программа должна записать следующий вывод в память:
05 03 02 03 03 03 03 04 00 00 08 00 00 03 05 09 00 00 00 00 01 00 00 00 00 ===> 00 00 означает отсутствие левого или правого ребенка.
Вот моя первая попытка написать ассемблерный код:
ORG $300
DC.B 05,03,08,09,01 ; Here we get the values and store them in memory adresses from 301 to 305
Entry:
LDS #$500
LDX #$301
LDAA 0,X
STAA $401
CreateTree:
LDAA [0,X]
LDAB [1,X]
CBA
BCS WriteLeftChild
BSR writeRightChild
writeLeftChild:
CMPB #$00
BEQ Exit
LDAA [1,X]
STAA 5,X
Increment ??
BSR CreateTree
writeRightChild:
CMPB #$00
BEQ Exit
LDAA [1,X]
STAA 10,X
Increment ??
BSR CreateTree
Exit:
RTS
Кто-нибудь может помочь мне решить этот алгоритм? Спасибо