⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ym31-4.asm

📁 rs纠错编码-译码部分
💻 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 + -