1

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 と右の子のアドレスの両方の値を格納するアセンブリ コードを書きたいと思います。私のプログラムの結果は、次の出力をメモリに書き込む必要があります: (最初の値)(左の子のアドレス)(右の子のアドレス)(2 番目の値)(左の子のアドレス)(右の子のアドレス) .......

したがって、これによると; プログラムは、次の出力をメモリのどこかに書き込む必要があります。

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

このアルゴリズムを解決するのを手伝ってくれる人はいますか? ありがとう

4

0 に答える 0