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
このアルゴリズムを解決するのを手伝ってくれる人はいますか? ありがとう