📄 ym31-4.asm
字号:
; 4进制RS变换译码,该码为本元RS码.其最小距离d=3,纠错能力t=1的(3,1)码.
; 施俊毅 97年2月
ORG 0000H
AJMP START
;接收到的码元存放单元
G0 EQU 44H
G1 EQU 45H
G2 EQU 46H
;纠正子存放单元
S0 EQU 47H
S1 EQU 48H
S2 EQU 49H
;
Q1 EQU 4AH
;
E2 EQU 4BH
; n-1
;Sj= Fri*a^i*j
; i=0
ORG 002FH
START: MOV R4, #03H ;j
MOV R2, #00H ;置IJTAB表的首地址
MOV R0, #S0 ;R0指向纠正子的首地址
NEXTA: MOV R1, #G0 ;R1指向接收码元的首地址
MOV @R0, #00H ;预置(R0)<--0
MOV R3, #03H ;i
NEXT: MOV A, R2
MOV DPTR, #IJTAB
MOVC A, @A+DPTR ;读表IJTAB
MOV B, A ;B为ETAB的纵坐标
MOV A, @R1
MOV DPTR, #ATAB
MOVC A, @A+DPTR ;求Ri的指数
ADD A, B
MOV DPTR, #ETAB
MOVC A, @A+DPTR ;A<=Fi * a^i * j
XRL A, @R0
MOV @R0, A
INC R1
INC R2
DJNZ R3, NEXT
INC R0
DJNZ R4, NEXTA
;判断是否有错
;即R0=R1=00H时,该码元无错
MOV A, #00H
ADD A, S0
ADD A, S1
JNZ HAVER
AJMP OK
;求S1/S0
MOV DPTR, #ATAB
MOV A, S0
MOVC A, @A+DPTR ;求S0的指数
MOV B, A
MOV A, S1
MOVC A, @A+DPTR ;求S1的指数
CLR C
SUBB A, B ;S1-S0
MOV B, A
ANL A, #80H
JZ ZSA ;判断是否为负数
MOV A, B ;若为负数--->取反+1
XRL A, #0FFH
INC A
MOV B, A ;求该数的模
MOV A, #04H
CLR C
SUBB A, B
SJMP ZSB
ZSA: MOV A, B
ZSB: MOV R0, A ;R0为S1/S0的指数
;判断有一位错误,可根据递归方程组求出
;E2 = E1 * ○1
MOV A, R0 ;这时的R0为○1的指数
MOV B, #08H
MUL AB
MOV R2, A
;
MOV R1, #E2
;
MOV A, S1 ;E1
MOV DPTR, #ATAB
MOVC A, @A+DPTR ;求Ri的指数
ADD A, R2
MOV DPTR, #ETAB
MOVC A, @A+DPTR
MOV @R1, A
;纠正错误
MOV A, E2
XRL S2, A
OK: NOP
;(指数相乘表)
ETAB: DB 01H,02H,03H,00H
DB 02H,03H,01H,00H
DB 03H,02H,01H,00H
DB 00H,00H,00H,00H
;(数值找指数表)
ATAB: DB 03H,00H,01H,02H
;(I,J相乘表)
IJTAB: DB 00H,00H,00H,04H,08H,00H,08H,04H
DB 00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -