Создание дерева с помощью сборки микроконтроллера 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

Кто-нибудь может помочь мне решить этот алгоритм? Спасибо

0 ответов

Другие вопросы по тегам