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

📄 des_sam.s

📁 DES的C语言算法,是一个完整C51工程,直接下载就可以应用了.
💻 S
📖 第 1 页 / 共 2 页
字号:
                MOV B,#7
                DIV AB
                ADD A,#Ci_ADDR
                MOV R1,A        ;GET THE ADDRESS OF BYTE IN C OR D
                MOV A,@R1       ;GET THE VALUE OF BYTE IN C OR D
                MOV R1,A
                MOV A,B
                INC A
                CPL A
                ANL A,#07H
                JZ N_LLOP3
                MOV B,A
                MOV A,#1
LOP:            RL  A
                DJNZ B,LOP
                LJMP E_LLOP3
N_LLOP3:        MOV A,#1
E_LLOP3:        ANL A,R1
                JZ  TT11
                INC R4
TT11:           DJNZ R5,LLOP110 ;IF A BYTE IS OVER
                MOV A,R6        ;SAVE THE BYTE TO RAM
                DEC A           ;
                CPL A           ;
                ANL A,#07H      ;
                MOV R1,KEY_ADDR ;GET THE BEGINNING ADDRESS OF THE Ki
                ADD A,R1        ;
                MOV R1,A        ;
                MOV A,R4        ;
                MOV @R1,A       ;
                DJNZ R6,LLOP11  ;IF CONVERT IS OVER
;E=E^Ki
                MOV R6,#8
                MOV R0,DATA_ADDR
                MOV R1,KEY_ADDR
LLOP13:         MOV A,@R0
                XRL A,@R1
                MOV @R0,A
                INC R0
                INC R1
                DJNZ R6,LLOP13
;P<-E^Ki CHANGED BY S
                MOV R6,#8
                MOV R5,DATA_ADDR  ;E^Ki
                MOV R1,KEY_ADDR  ;P
                DEC R1
                MOV DPTR,#SX
LLOP14:
                MOV R2,#0
                MOV A,R5        ;GET THE VALUE OF E^Ki
                MOV R0,A        ;
                MOV A,@R0       ;
                MOV R0,A        ;SAVE IN R0
                INC R5          ;POINT THE NEXT E^Ki
                RRC A           ;GET THE BIT 4,3,2,1
                MOV D_TMP_B,C         ;
                ANL A,#0FH      ;
                MOV R3,A        ;SAVE IN R3
JB0:            MOV A,R0        ;
                JNB ACC.5,JB1   ;
                INC R2          ;SAVE IN R2
JB1:
                ;SHIF VALUE OF TABLE S
                MOV A,R2
                MOV B,#10H
                MUL AB
                MOV C,D_TMP_B
                JNC  B0
                ADD A,#8H
B0:             MOV R4,A
                MOV A,R6
                DEC A
                CPL A
                ANL A,#7H
                MOV B,#20H
                MUL AB
                ADD A,R4
                MOV R4,A
                MOV A,R3
                CLR C
                RRC A
                MOV D_TMP_B,C
                ADD A,R4
                MOVC A,@A+DPTR
                MOV C,D_TMP_B
                JC N_SWAP
                SWAP A
N_SWAP:         ANL A,#0FH
                MOV R3,A        ;GET THE FIRST Pi
                MOV A,R6
                JB  ACC.0,ABC
                INC R1
                MOV A,R3
                SWAP A
                MOV @R1,A
                MOV R3,#0
ABC:            MOV A,R3
                ADD A,@R1
                MOV @R1,A
                DJNZ R6,LLOP14
;P->F
                MOV R6,#4
                MOV DPTR,#P_CH
                MOV R2,#0H
                MOV R3,KEY_ADDR
                MOV R1,KEY_ADDR
        INC R1
        INC R1
        INC R1
        INC R1

LLOP15:         MOV R5,#8
                MOV R4,#0
LLOP150:        MOV A,R4
                RL  A
                MOV R4,A
                MOV A,R2
                INC R2
                MOVC A,@A+DPTR
                MOV B,#8
                DIV AB
                ADD A,R3
                MOV R0,A        ;GET THE ADDRESS OF BYTE IN Ri-1
                MOV A,@R0       ;GET THE VALUE OF BYTE IN Ri-1
                MOV R0,A        ;SAVE IN R0
                MOV A,B
                CPL A
                ANL A,#07H
                JZ N_LLOP4
                MOV B,A
                MOV A,#1
LP15:           RL  A
                DJNZ B,LP15
                LJMP E_LLOP4
N_LLOP4:        MOV A,#1
E_LLOP4:        ANL A,R0
                JZ  TT15
                INC R4
TT15:
                DJNZ R5,LLOP150 ;IF A BYTE IS OVER
                MOV A,R4
                MOV @R1,A
                INC R1
                DJNZ R6,LLOP15  ;IF CONVERT IS OVER
;Li=Ri-1,Ri=Li-1^F
                MOV R6,#4
                MOV R3,#Li_ADDR ;Li
                MOV R1,#Ri_ADDR ;Ri
                MOV R2,KEY_ADDR  ;F
        INC R2
        INC R2
        INC R2
        INC R2
LLOP16:         MOV A,R3        ;SAVE Li-1 IN R4 TEMP
                MOV R0,A        ;
                MOV A,@R0       ;
                MOV R4,A        ;
                MOV A,@R1       ;Li<-Ri-1
                MOV @R0,A       ;
                MOV A,R2        ;GET F
                MOV R0,A        ;
                MOV A,R4        ;
                XRL A,@R0       ;Li-1^F
                MOV @R1,A       ;LI<-Li-1^F
                INC R3
                INC R1
                INC R2
                DJNZ R6,LLOP16
;IF R7-1 IS NOT 0,THEN LLOP
                ;DJNZ R7,LLOP
                DEC R7
                MOV A,R7
                JZ PPP
                CLR A
                MOV DPTR,#LLOP
                JMP @A+DPTR
PPP:
;L->R,R->L
                MOV R7,#4H
                MOV R0,#Li_ADDR
                MOV R1,#Ri_ADDR
LLOP8:          MOV A,@R0
                MOV R2,A
                MOV A,@R1
                MOV @R0,A
                MOV A,R2
                MOV @R1,A
                INC R0
                INC R1
                DJNZ R7,LLOP8
;IP-1 CONVERT
                MOV R7,#8               ;I
                MOV R2,#L_R_ADDR        ;L16 AND R16
                MOV R1,DATA_ADDR       ;SECRET DATA
                MOV R3,#8H      ;INIT SECRET DATA AREA TO ZERO
INIT1:          MOV A,R3        ;
                DEC A           ;
                ANL A,#7H       ;
                ADD A,R1        ;
                MOV R0,A        ;
                MOV @R0,#0H     ;
                DJNZ R3,INIT1   ;
LLOP4:          MOV A,R7        ;GET POSITION OF L16 AND R16
                DEC A           ;
                CPL A           ;
                RR A            ;
                ANL A,#03H      ;
                MOV R3,A        ;SAVE IN R3
                MOV A,R7        ;
                JB ACC.0,WJMP1  ;IF R7.0 IS 0,THEN R3+4->R3
                MOV A,R3        ;
                ADD A,#4H       ;
                MOV R3,A        ;
WJMP1:          MOV A,R3        ;GET THE VALUE OF L16 OR R16
                ADD A,R2        ;
                MOV R0,A        ;
                MOV A,@R0       ;
                MOV R3,A        ;SAVE IN R3
                MOV R6,#8H
                MOV A,R6
                MOV R5,#1H      ;BIT POSITION OF L16 OR R16
LLOP5:          MOV R4,#1H      ;BIT POSITION OF SECRET
                MOV A,R3
                ANL A,R5
                JZ  WJP0        ;BIT VALUE IS 1,GIVE THE 1
                MOV A,R7        ;
                DEC A           ;
                MOV R0,A        ;
                JZ  WJMP2       ;
                MOV A,#1        ;
WJMP3:          RL  A           ;
                DJNZ R0,WJMP3   ;
                MOV R4,A        ;
WJMP2:          MOV A,R6
                DEC A
                CPL A
                ANL A,#07H
                ADD A,R1
                MOV R0,A
                MOV A,@R0
                ORL A,R4
                MOV @R0,A
WJP0:           MOV A,R5
                RL  A
                MOV R5,A
                DJNZ R6,LLOP5
                DJNZ R7,LLOP4
                RET		;*************
;************************
PC_1:   DB      38H,30H,28H,20H,18H,10H,08H
        DB      00H,39H,31H,29H,21H,19H,11H
        DB      09H,01H,3AH,32H,2AH,22H,1AH
        DB      12H,0AH,02H,3BH,33H,2BH,23H
        DB      3EH,36H,2EH,26H,1EH,16H,0EH
        DB      06H,3DH,35H,2DH,25H,1DH,15H
        DB      0DH,05H,3CH,34H,2CH,24H,1CH
        DB      14H,0CH,04H,1BH,13H,0BH,03H
PC_2:   DB      0DH,10H,0AH,17H,00H,04H
        DB      02H,1BH,0EH,05H,14H,09H
        DB      16H,12H,0BH,03H,19H,07H
        DB      0FH,06H,1AH,13H,0CH,01H
        DB      28H,33H,1EH,24H,2EH,36H
        DB      1DH,27H,32H,2CH,20H,2FH
        DB      2BH,30H,26H,37H,21H,34H
        DB      2DH,29H,31H,23H,1CH,1FH
SX:     DB      0E4H,0D1H,2FH,0B8H,3AH,6CH,59H,07H
        DB      0FH,74H,0E2H,0D1H,0A6H,0CBH,95H,38H
        DB      41H,0E8H,0D6H,2BH,0FCH,97H,3AH,50H
        DB      0FCH,82H,49H,17H,5BH,3EH,0A0H,6DH
        DB      0F1H,8EH,6BH,34H,97H,2DH,0C0H,5AH
        DB      3DH,47H,0F2H,8EH,0C0H,1AH,69H,0B5H
        DB      0EH,7BH,0A4H,0D1H,58H,0C6H,93H,2FH
        DB      0D8H,0A1H,3FH,42H,0B6H,7CH,05H,0E9H
        DB      0A0H,9EH,63H,0F5H,1DH,0C7H,0B4H,28H
        DB      0D7H,09H,34H,6AH,28H,5EH,0CBH,0F1H
        DB      0D6H,49H,8FH,30H,0B1H,2CH,5AH,0E7H
        DB      1AH,0D0H,69H,87H,4FH,0E3H,0B5H,2CH
        DB      7DH,0E3H,06H,9AH,12H,85H,0BCH,4FH
        DB      0D8H,0B5H,6FH,03H,47H,2CH,1AH,0E9H
        DB      0A6H,90H,0CBH,7DH,0F1H,3EH,52H,84H
        DB      3FH,06H,0A1H,0D8H,94H,5BH,0C7H,2EH
        DB      2CH,41H,7AH,0B6H,85H,3FH,0D0H,0E9H
        DB      0EBH,2CH,47H,0D1H,50H,0FAH,39H,86H
        DB      42H,1BH,0ADH,78H,0F9H,0C5H,63H,0EH
        DB      0B8H,0C7H,1EH,2DH,6FH,09H,0A4H,53H
        DB      0C1H,0AFH,92H,68H,0DH,34H,0E7H,5BH
        DB      0AFH,42H,7CH,95H,61H,0DEH,0BH,38H
        DB      9EH,0F5H,28H,0C3H,70H,4AH,1DH,0B6H
        DB      43H,2CH,95H,0FAH,0BEH,17H,60H,8DH
        DB      4BH,2EH,0F0H,8DH,3CH,97H,5AH,61H
        DB      0D0H,0B7H,49H,1AH,0E3H,5CH,2FH,86H
        DB      14H,0BDH,0C3H,7EH,0AFH,68H,05H,92H
        DB      6BH,0D8H,14H,0A7H,95H,0FH,0E2H,3CH
        DB      0D2H,84H,6FH,0B1H,0A9H,3EH,50H,0C7H
        DB      1FH,0D8H,0A3H,074H,0C5H,6BH,0EH,92H
        DB      7BH,41H,9CH,0E2H,06H,0ADH,0F3H,58H
        DB      21H,0E7H,4AH,8DH,0FCH,90H,35H,6BH
P_CH:   DB      0FH,06H,13H,14H,1CH,0BH,1BH,10H
        DB      00H,0EH,16H,19H,04H,11H,1EH,09H
        DB      01H,07H,17H,0DH,1FH,1AH,02H,08H
        DB      12H,0CH,1DH,05H,15H,0AH,03H,18H
SHIF:   DB      00H,01H,02H,02H,02H,02H,02H,02H
        DB      01H,02H,02H,02H,02H,02H,02H,01H
    END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -