📄 des_sam.s
字号:
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 + -