21,459
社区成员
发帖
与我相关
我的任务
分享
ORG 00H
JP START
ORG 1000H
START:
LD HL, DATA
LD A, (HL)
BIT 3, A
JP Z, PASS1
SET 4, A
PASS1:
LD D, 17H
AND D
LD E, A
LD D, 55H
AND D
JP PE, PASS2
SET 6, E
PASS2:
LD A, E
LD D, 33H
AND D
JP PE, PASS3
SET 5, E
PASS3:
LD A, E
LD D, 0FH
AND D
JP PE, PASS4
SET 3, E
PASS4:
LD HL, RESULT
LD (HL), E
HALT
ORG 2000H
DATA DB 05H
RESULT DB 00H
ORG 00H
JP START
ORG 1000H
START:
LD HL, DATA
LD C, (HL)
LD B, 00H
LD HL, CODES
ADD HL, BC
LD A, (HL)
LD HL, RESULT
LD (HL), A
HALT
ORG 2000H
DATA DB 05H
RESULT DB 00H
CODES DB 00H, 69H, 2AH, 43H
DB 4CH, 25H, 66H, 0FH
DB 70H, 19H, 5AH, 33H
DB 3CH, 55H, 16H, 7FH
ORG 00H
JP START
ORG 10000H
START:
LD HL, DATA ; 取出源数据
LD A, [HL]
BIT 3, A ; 将第3位信息位移至第4位
JP PASS1
SET 4, A
PASS1:
LD D, 17H ; 0010111,所有冗余码初始化为0
AND D
LD E, A ; 数据保存在E里面
LD D, 55H ; 1010101,取第1个冗余码的线性码位
AND D
JP NP, PASS2 ; 判断各位中1的个数为奇数则设置冗余位
SET 6, E
PASS2:
LD A, E ; 从E中取回数据
LD D, 33H ; 0110011,取第2个冗余码的线性码位
AND D
JP NP, PASS3 ; 判断各位中1的个数为奇数则设置冗余位
SET 5, E
PASS3:
LD A, E ; 从E中取回数据
LD D, 0FH ; 0001111,取第3个冗余码的线性码位
AND D
JP NP, PASS4 ; 判断各位中1的个数为奇数则设置冗余位
SET 3, E
PASS4:
LD HL, RESULT ; 保存结果
LD [HL], E
ORG 2000H
DATA DB 05H ; 源数据
RESULT DB 00H ; 结果
这段代码中JP NP指令不确定用的对不对,如果有错就都改成JP P。 ORG 00H
JP START
ORG 10000H
START:
LD HL, DATA ; 取源数据
LD C, [HL]
LD B, 00H
LD HL, CODES ; 取编码表
ADD HL, BC ; 定位编码表
LD A, [HL] ; 取海明码
LD HL, RESULT ; 保存结果
LD [HL], A
ORG 2000H
DATA DB 05H ; 源数据
RESULT DB 00H ; 结果
CODES DB 00H, 69H, 2AH, 43H, 4CH, 25H, 66H, 0FH, 70H, 19H, 5AH, 33H, 3CH, 55H, 16H, 3FH ; 0~15对应的海明码
这段代码中的海明码是手工计算出来的,你自己验证一下对不对。