?? 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 + -