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

📄 des_sam.s

📁 DES的C语言算法,是一个完整C51工程,直接下载就可以应用了.
💻 S
📖 第 1 页 / 共 2 页
字号:

; /************************************************************************

;  * Project Name    : 
;  * Module Name    : DES encrypt and descrypt routine
;  *
;  * History               Author        
 ;    Version     Comment
;  * 2000.09.16        P.Z.F            0.00    
    ;original version
;  

; C语言接口原形定义: 
; void    DES(uchar idata * DATA_ADDR,uchar idata *KEY_ADDR,bit JA_JE_B)

NAME    DES

?PR?_DES?DES        SEGMENT CODE INBLOCK
?BI?_DES?DES        SEGMENT BIT OVERLAYABLE
?DT?_DES?DES        SEGMENT DATA OVERLAYABLE
?ID?_DES?DES        SEGMENT IDATA OVERLAYABLE

    PUBLIC    ?_DES?BIT
    PUBLIC    _DES

    RSEG  ?BI?_DES?DES
?_DES?BIT:
    JA_JE_B:   DBIT   1
    ORG  1
    D_TMP_B:   DBIT   1

    RSEG  ?DT?_DES?DES
   KEY_ADDR:    DS    1
   DATA_ADDR:    DS    1
    RSEG  ?ID?_DES?DES
   L_R_ADDR:    DS    8
   C_D_ADDR:    DS    8

   Li_ADDR    EQU    L_R_ADDR
   Ri_ADDR    EQU    (L_R_ADDR+4)
   Ci_ADDR    EQU    C_D_ADDR
   Di_ADDR    EQU    (C_D_ADDR+4)


    RSEG  ?PR?_DES?DES
    USING    0
_DES:
    MOV      DATA_ADDR,R7
    MOV      KEY_ADDR,R5


        MOV R6,#8H
                MOV R1,DATA_ADDR       ;DATA ADDRESS
                MOV R2,#L_R_ADDR        ;L0 AND R0 ADDRESS
                MOV R3,#40H     ;BIT POSITION
LLOP1:
                MOV R7,#8H
                MOV R4,#0
                CJNE R6,#4H,LLOP2
                MOV R3,#80H
LLOP2:          MOV A,R4
                RL A
                MOV R4,A
                MOV A,R1
                ADD A,R7
                DEC A           ;GET THE ADDRESS OF BYTE IN DATA
                MOV R0,A
                MOV A,@R0       ;GET THE VALUE OF BYTE IN DATA
                ANL A,R3
                JZ  TT1
                INC R4
TT1:            DJNZ R7,LLOP2   ;IF A BYTE IS OVER
                MOV A,R3        ;GET NEW BIT POSITION
                RR  A           ;
                RR  A           ;
                MOV R3,A        ;
                MOV A,R6        ;SAVE THE BYTE TO RAM
                DEC A           ;
                CPL A
                ANL A,#07H      ;
                ADD A,R2        ;
                MOV R0,A        ;
                MOV A,R4        ;
                MOV @R0,A       ;
                DJNZ R6,LLOP1   ;IF DATA IS OVER
;KEY->C0 AND D0
                MOV R6,#8
                MOV R1,KEY_ADDR
                MOV R2,#C_D_ADDR
                MOV DPTR,#PC_1
                MOV R3,#0H
LLOP3:          MOV R7,#7H
                MOV R4,#0H
LLOP30:         MOV A,R4
                RL  A
                MOV R4,A
                MOV A,R3        ;GET VALUE OF PC_1 TABLE
                MOVC A,@A+DPTR  ;
                INC R3
                MOV B,#8
                DIV AB
                ADD A,R1
                MOV R0,A        ;GET THE ADDRESS OF BYTE IN KEY
                MOV A,@R0       ;GET THE VALUE OF BYTE IN KEY
                MOV R5,A        ;SAVE
                MOV A,B         ;GET THE BIT POSITION
                CPL A
                ANL A,#07H
                JZ  N_LLOP1
                MOV B,A
                MOV A,#1
LP:             RL  A
                DJNZ B,LP
                LJMP E_LLOP1
N_LLOP1:        MOV A,#1
E_LLOP1:        ANL A,R5
                JZ  TT2
                INC R4
TT2:            DJNZ R7,LLOP30  ;IF A BYTE IS OVER
                MOV A,R6        ;SAVE THE BYTE TO RAM
                DEC A           ;
                CPL A           ;
                ANL A,#07H      ;
                ADD A,R2        ;
                MOV R0,A        ;
                MOV A,R4        ;
                MOV @R0,A       ;
                DJNZ R6,LLOP3   ;IF DATA IS OVER

;BEGIN LLOP
                MOV R7,#10H
LLOP:
;Ri->E
                MOV R6,#8
                MOV R1,#Ri_ADDR
                MOV R2,DATA_ADDR
                MOV R3,#1FH
LLOP_1:         MOV R4,#0
                MOV R5,#6
LLOP10:         MOV A,R4
                RL  A
                MOV R4,A
                MOV A,R3
                MOV B,#8
                DIV AB
                ADD A,R1
                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
                MOV A,B
                CPL A
                ANL A,#07H
                JZ  N_LLOP2
                MOV B,A
                MOV A,#1
LP10:           RL  A
                DJNZ B,LP10
                LJMP E_LLOP2
N_LLOP2:        MOV A,#1
E_LLOP2:        ANL A,R0
                JZ  TT10
                INC R4
TT10:           INC R3
                CJNE R3,#20H,WW0
                MOV R3,#0
WW0:            DJNZ R5,LLOP10  ;IF A BYTE IS OVER
                MOV A,R6        ;SAVE THE BYTE TO RAM
                DEC A           ;
                CPL A           ;
                ANL A,#07H      ;
                ADD A,R2        ;
                MOV R0,A        ;
                MOV A,R4        ;
                MOV @R0,A       ;
                DEC R3          ;ADJUST THE BIT POSITION
                DEC R3          ;
                DJNZ R6,LLOP_1  ;IF DATA IS OVER
;C0 AND D0->Ki
                MOV A,R7        ;GET THE SHIF BIT NUMBER
                DEC A           ;
                CPL A           ;
                ANL A,#0FH      ;
                MOV DPTR,#SHIF ;
                MOVC A,@A+DPTR  ;
                MOV R3,A        ;SAVE IN R3
                MOV C,JA_JE_B
                JC DES0
                MOV A,R3
                JZ N_SHIF
LLOP0A:         MOV R1,#0H      ;SET THE INITIATE ADDRESS SHIF VALUE
                CLR C
                MOV D_TMP_B,C
LP00A:          MOV A,R1        ;GET THE Ci-1 BYTE
                MOV R4,#Ci_ADDR ;
                ADD A,R4        ;
                MOV R0,A        ;
                MOV A,@R0       ;
                MOV C,D_TMP_B         ;
                MOV ACC.7,C
                CLR C
                RRC A           ;SHIF Ci
WW00A:          MOV D_TMP_B,C
                MOV @R0,A
                INC R1
                CJNE R1,#4,LP00A;
                MOV C,D_TMP_B
                JNC WW01A
                MOV R0,#Ci_ADDR
                MOV A,@R0
                MOV C,D_TMP_B
                MOV ACC.6,C
                MOV @R0,A
WW01A:          MOV R1,#0
                CLR C
                MOV D_TMP_B,C

LP01A:          MOV A,R1        ;GET THE Di-1 BYTE
                MOV R4,#Di_ADDR ;
                ADD A,R4        ;
                MOV R0,A        ;
                MOV A,@R0       ;
                MOV C,D_TMP_B         ;
                MOV ACC.7,C     ;
                CLR C
                RRC A           ;SHIF Di
WW02A:          MOV D_TMP_B,C
                MOV @R0,A
                INC R1
                CJNE R1,#4,LP01A;
                MOV C,D_TMP_B
                JNC WW03A
                MOV R0,#Di_ADDR
                MOV A,@R0
                MOV C,D_TMP_B
                MOV ACC.6,C
                MOV @R0,A
WW03A:          DJNZ R3,LLOP0A
N_SHIF:        LJMP SH_O
DES0:           MOV A,R3
                JNZ LLOP0B
                INC R3
LLOP0B:         MOV R1,#4H      ;SET THE INITIATE ADDRESS SHIF VALUE
                CLR C
                MOV D_TMP_B,C
LP00B:          MOV A,R1        ;GET THE Ci-1 BYTE
                MOV R4,#Ci_ADDR ;
                DEC R4          ;
                ADD A,R4        ;
                MOV R0,A        ;
                MOV A,@R0       ;
                MOV C,D_TMP_B         ;
                RLC A           ;SHIF Ci
                JNB ACC.7,WW00B
                CPL C
                CPL ACC.7
WW00B:          MOV D_TMP_B,C
                MOV @R0,A
                DJNZ R1,LP00B   ;
                MOV C,D_TMP_B
                JNC WW01B
                MOV R0,#Di_ADDR
                DEC R0
                MOV A,@R0
                MOV C,D_TMP_B
                MOV ACC.0,C
                MOV @R0,A
WW01B:          MOV R1,#4H
                CLR C
                MOV D_TMP_B,C
LP01B:          MOV A,R1        ;GET THE Di-1 BYTE
                MOV R4,#Di_ADDR ;
                DEC R4
                ADD A,R4        ;
                MOV R0,A        ;
                MOV A,@R0       ;
                MOV C,D_TMP_B         ;
                RLC A           ;SHIF Di
                JNB ACC.7,WW02B
                CPL C
                CPL ACC.7
WW02B:          MOV D_TMP_B,C
                MOV @R0,A
                DJNZ R1,LP01B   ;
                MOV C,D_TMP_B
                JNC WW03B
                MOV A,#Di_ADDR
                ADD A,#3H
                MOV R0,A
                MOV A,@R0
                MOV C,D_TMP_B
                MOV ACC.0,C
                MOV @R0,A
WW03B:          DJNZ R3,LLOP0B
                                ;SHIF IS OVER
SH_O:           MOV R6,#8H
                MOV R2,#0H      ;SHIF VALUE OF PC_2 TABLE

LLOP11:         MOV R4,#0
                MOV R5,#6H      ;LLOP110 VIABLE
LLOP110:        MOV A,R4
                RL  A
                MOV R4,A
                MOV A,R2
                MOV DPTR,#PC_2
                MOVC A,@A+DPTR
                INC R2

⌨️ 快捷键说明

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