0

我在这方面遇到了困难,没有运气,将不胜感激!谢谢

汉明码是一种用于编码和解码信息以实现错误检测和纠正的特殊技术。Richard Hamming 于 1951 年发表了他的作品。过去硬件的高成本使这项技术成本高昂,因此不实用。CRAY 计算机设计已投放市场,该设计使用 Hamming 论文中描述的单一纠错技术。

编码

汉明码的一个重要特征是该算法的所有组件在数学上都是合理且实用的。编码过程是根据要传输的信息计算“偶校验”位,并将这些奇偶校验位与传输的信息一起发送。如果信息包含 4 位 (abcd),则需要三个奇偶校验位 (rst)。这些奇偶校验位称为校验位。编码后的消息结构如下:

position    7   6   5   4   3   2   1
bit a   b   c   r   d   s   t

在哪里:

r is set to create even parity for bits 7, 6, 5 and 4;
s is set to create even parity for bits 7, 6, 3 and 2;
t is set to create even parity for bits 7, 5, 3 and 1.

您将在内存中对信息位 a、b、c 和 d 所在的字节的内容进行编码,如下所示:

xxxxabcd

例如,假设您具有以下内存配置,您的任务将是组成编码字节,如下所示:

记忆编码信息

2274    xxxx1011    01010101
2275    xxxx1001    01001100
2276    xxxx0011    00111110
4

1 回答 1

0

简单的答案是使用查找表 (LUT) 进行编码(以及解码)

START:
        LEA     INPUT,A1
        LEA     OUTPUT,A2
        LEA     ENCODE,A0
ENCLOOP:
        MOVE.B  (A1)+,D0
        BMI.S   EXIT
        AND.W   #$0F,D0
        MOVE.B  (A0,D0.W),D1     ; encode byte
        MOVE.B  D1,(A2)+         ; save it
        BRA.S   ENCLOOP

EXIT:
        SIMHALT
        ; change table to match your Hamming scheme
ENCODE: DC.B $2E,$AD,$14,$97,$B2,$31,$98,$1B
        DC.B $E4,$67,$CE,$4D,$68,$EB,$52,$D1
INPUT:  DC.B $0B,$09,$03,$FF

OUTPUT: DS.B 3
于 2018-04-25T18:58:12.980 回答