2017-05-23 6 views
1

ディスク基板(ARM7)でフレッカーのアルゴリズムをhttps://en.wikipedia.org/wiki/Fletcher%27s_checksumから実装しようとしていますが、入力は単一の32ビットワードです。アセンブリ内のフレッチャーアルゴリズム

それはそうメモリに膨大な数のロードを必要に応じて

は、フレッチャーさんの32ビットバージョンを実装していませんでした:

を私は2つの16ビットの半分のワードに32ビット・ワードを分割し、その後fletcher-を実行していますよ16アルゴリズム。

しかし、出力は常に数値の合計ですが、これは私にとっては非常に間違っているようです。

例えば、

Input: 0x1b84ccc/1101110000100110011001100 

予想される出力:

Checksum value 

実出力:これは実際のアルゴリズムである、または私はエラーをした場合

The sum of the 2 16 bit half words. Wut 

誰も助けてもらえますか?

@ Input: 
@ r0: 32 bit message 
@ Output: 
@ r0: checksum value 
fletchers_checksum: 
    push {r1-r4,lr} 
    mov r3, #0 @ store the sum 
    mov r4, r0 @ store message 

    @split to 2 16 bit messages: 
    @@take frequency 
    ldr r1, =#0xFFFF0000 
    and r0, r1, r4 
    lsr r0, #16 
    bl compute_checksum_for_16_bit_number 

    @@amplitude 
    ldr r1, =#0xFFFF 
    and r0, r1, r4 
    bl compute_checksum_for_16_bit_number 

    mov r0, r3 
    pop {r1-r3,lr} 
    bx lr 

compute_checksum_for_16_bit_number: 
    push {lr} 
    ldr r1, =#65536 
    add r0, r3 @add current sum to it. 
    bl mod 
    mov r3, r0 @store new sum 
    pop {lr} 
    bx lr 

ありがとうございます!リンクWikipediaのページから

+0

あなたはarmv7を意味しますか? –

+0

はい、お詫び申し上げます@old_timer – Wboy

答えて

2

通常、第2の和はを2^16を掛けたと 簡単なチェックサムに追加し、効果的に で和サイド・バイ・サイドスタッキングされます最下位にある単純なチェックサムを持つ32ビットワード。

コードは、2つの16ビットチェックサムを計算するように見えますが、必要に応じて2番目のチェックサムを16ビットシフトしないように見えます。

+0

意味があります。ありがとうございました! :) – Wboy

関連する問題