ディスク基板(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のページから
あなたはarmv7を意味しますか? –
はい、お詫び申し上げます@old_timer – Wboy