gpt4 book ai didi

algorithm - 汇编中的 Fletcher 算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:40:10 31 4
gpt4 key购买 nike

在 discoboard (ARM7) 上,我试图从 https://en.wikipedia.org/wiki/Fletcher%27s_checksum 中实现弗莱彻算法,输入是一个 32 位字。

无法实现 32 位版本的 fletcher,因为它需要将大量数据加载到内存中,因此:

我将 32 位字拆分为 2 个 16 位半字,然后运行 ​​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

谢谢!

最佳答案

来自链接的维基百科页面:

Usually, the second sum will be multiplied by 2^16 and added to the simple checksum, effectively stacking the sums side-by-side in a 32-bit word with the simple checksum at the least significant end.

您的代码似乎计算了两个 16 位校验和,但没有按要求将第二个校验和移动 16 位。

关于algorithm - 汇编中的 Fletcher 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44124689/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com