2

Pythonでばかげたハフマンコンプレッサーを作成したので、画像/音声データを圧縮して、Tandy ColorComputerProjectsに適用できます。デコンプレッサは6809アセンブリで書かれています。ハフマンツリーを格納する方法が見つからなかったため、ツリーにアクセスして正しい非圧縮データを取得するアセンブリコードを生成しました。次に例を示します。

DECOMP_HUFFMAN:        PSHS    A,B,X,Y,U
                       LDB     #8
                       STB     $2100
                       pshs    x
                       ldx     $2102
                       stx     $2106
                       puls    x                       
                       LDB     ,X+
                       JMP     inicio
prox_bit:              LSLB
                       PSHS    CC
                       DEC     $2100
                       BNE     S_P_B
                       LDB     #8
                       STB     $2100
                       LDB       ,X+
S_P_B:                 PULS    CC
                       RTS
armazena:              STA       ,U+
                       LEAY    -1,Y
                       BNE      inicio
                       PULS   U,Y,X,B,A
                       RTS


inicio:     jsr prox_bit
            tfr  cc,a
            anda #1
            sta  $2104
            lda ($2102)
            bne  n1
            lda $2104
n0:         pshs x
            ldx  $2102
            leax 1,x
            lda  a,x            
            puls x
            bsr  armazena
            pshs x
            ldx  $2106
            stx  $2102
            puls x
            bra inicio


n1:         cmpa #1
            bne  n2
            lda  $2104
            bne  n0
            bra  n4

n2:         cmpa #2
            bne  n3
            lda  $2104
            beq  n0

n3:         lda  $2104
n4:         pshs x
            ldx   $2102
            leax  1,x
            lda   a,x
            leax  a,x            
            stx   $2102
            puls x
            bra   inicio

アセンブリコードを作成する代わりに、実際のハフマンツリーを使用したいと思います。

お時間をいただきありがとうございます。

4

1 に答える 1

3

各シンボルのコード長を送信するだけで、ハフマンコードを送信できます。ツリーを送信する必要はありません。コード長がゼロの場合は、そのシンボルが発生しないことを示します。

送信する内容は次のようになります。

A: 2
B: 0
C: 0
D: 3
E: 1
F: 0
G: 0
H: 0
I: 3
J: 0

番号のみを送信する場合、シンボルへの割り当てはシンボル順になります。

両端は正規のハフマンコードを想定しており、コード値は最短のコード長から最長のコード長の順に割り当てられます。ビット長の範囲内で、コードは順番にシンボルに段階的に割り当てられます。例(記号:コード長-コード):

E: 1 - 0
A: 2 - 10
D: 3 - 110
I: 3 - 111

これで、デコーダーは、各ビット長の間のカットオフで下位ビットを整数値と比較するだけで済みます(上記のビットを逆に格納します)。各ビット長内で、最初からのインデックスは、シンボルのルックアップテーブルへのオフセットを提供します。

于 2012-04-22T01:50:14.347 に答える