📄 des_sam.lst
字号:
A51 MACRO ASSEMBLER DES_SAM 01/31/2008 15:07:52 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN des_sam.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE des_sam.s SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2 ; /************************************************************************
3
4 ; * Project Name :
5 ; * Module Name : DES encrypt and descrypt routine
6 ; *
7 ; * History Author
8 ; Version Comment
9 ; * 2000.09.16 P.Z.F 0.00
10 ;original version
11 ;
12
13 ; C语言接口原形定义:
14 ; void DES(uchar idata * DATA_ADDR,uchar idata *KEY_ADDR,bit JA_JE_B)
15
16 NAME DES
17
18 ?PR?_DES?DES SEGMENT CODE INBLOCK
19 ?BI?_DES?DES SEGMENT BIT OVERLAYABLE
20 ?DT?_DES?DES SEGMENT DATA OVERLAYABLE
21 ?ID?_DES?DES SEGMENT IDATA OVERLAYABLE
22
23 PUBLIC ?_DES?BIT
24 PUBLIC _DES
25
---- 26 RSEG ?BI?_DES?DES
0000 27 ?_DES?BIT:
0000 28 JA_JE_B: DBIT 1
0001 29 ORG 1
0001 30 D_TMP_B: DBIT 1
31
---- 32 RSEG ?DT?_DES?DES
0000 33 KEY_ADDR: DS 1
0001 34 DATA_ADDR: DS 1
---- 35 RSEG ?ID?_DES?DES
0000 36 L_R_ADDR: DS 8
0008 37 C_D_ADDR: DS 8
38
0000 39 Li_ADDR EQU L_R_ADDR
0004 40 Ri_ADDR EQU (L_R_ADDR+4)
0008 41 Ci_ADDR EQU C_D_ADDR
000C 42 Di_ADDR EQU (C_D_ADDR+4)
43
44
---- 45 RSEG ?PR?_DES?DES
46 USING 0
0000 47 _DES:
0000 8F00 F 48 MOV DATA_ADDR,R7
0002 8D00 F 49 MOV KEY_ADDR,R5
50
51
0004 7E08 52 MOV R6,#8H
0006 A900 F 53 MOV R1,DATA_ADDR ;DATA ADDRESS
0008 7A00 F 54 MOV R2,#L_R_ADDR ;L0 AND R0 ADDRESS
000A 7B40 55 MOV R3,#40H ;BIT POSITION
000C 56 LLOP1:
000C 7F08 57 MOV R7,#8H
000E 7C00 58 MOV R4,#0
A51 MACRO ASSEMBLER DES_SAM 01/31/2008 15:07:52 PAGE 2
0010 BE0402 59 CJNE R6,#4H,LLOP2
0013 7B80 60 MOV R3,#80H
0015 EC 61 LLOP2: MOV A,R4
0016 23 62 RL A
0017 FC 63 MOV R4,A
0018 E9 64 MOV A,R1
0019 2F 65 ADD A,R7
001A 14 66 DEC A ;GET THE ADDRESS OF BYTE IN DATA
001B F8 67 MOV R0,A
001C E6 68 MOV A,@R0 ;GET THE VALUE OF BYTE IN DATA
001D 5B 69 ANL A,R3
001E 6001 70 JZ TT1
0020 0C 71 INC R4
0021 DFF2 72 TT1: DJNZ R7,LLOP2 ;IF A BYTE IS OVER
0023 EB 73 MOV A,R3 ;GET NEW BIT POSITION
0024 03 74 RR A ;
0025 03 75 RR A ;
0026 FB 76 MOV R3,A ;
0027 EE 77 MOV A,R6 ;SAVE THE BYTE TO RAM
0028 14 78 DEC A ;
0029 F4 79 CPL A
002A 5407 80 ANL A,#07H ;
002C 2A 81 ADD A,R2 ;
002D F8 82 MOV R0,A ;
002E EC 83 MOV A,R4 ;
002F F6 84 MOV @R0,A ;
0030 DEDA 85 DJNZ R6,LLOP1 ;IF DATA IS OVER
86 ;KEY->C0 AND D0
0032 7E08 87 MOV R6,#8
0034 A900 F 88 MOV R1,KEY_ADDR
0036 7A00 F 89 MOV R2,#C_D_ADDR
0038 900000 F 90 MOV DPTR,#PC_1
003B 7B00 91 MOV R3,#0H
003D 7F07 92 LLOP3: MOV R7,#7H
003F 7C00 93 MOV R4,#0H
0041 EC 94 LLOP30: MOV A,R4
0042 23 95 RL A
0043 FC 96 MOV R4,A
0044 EB 97 MOV A,R3 ;GET VALUE OF PC_1 TABLE
0045 93 98 MOVC A,@A+DPTR ;
0046 0B 99 INC R3
0047 75F008 100 MOV B,#8
004A 84 101 DIV AB
004B 29 102 ADD A,R1
004C F8 103 MOV R0,A ;GET THE ADDRESS OF BYTE IN KEY
004D E6 104 MOV A,@R0 ;GET THE VALUE OF BYTE IN KEY
004E FD 105 MOV R5,A ;SAVE
004F E5F0 106 MOV A,B ;GET THE BIT POSITION
0051 F4 107 CPL A
0052 5407 108 ANL A,#07H
0054 600B 109 JZ N_LLOP1
0056 F5F0 110 MOV B,A
0058 7401 111 MOV A,#1
005A 23 112 LP: RL A
005B D5F0FC 113 DJNZ B,LP
005E 020000 F 114 LJMP E_LLOP1
0061 7401 115 N_LLOP1: MOV A,#1
0063 5D 116 E_LLOP1: ANL A,R5
0064 6001 117 JZ TT2
0066 0C 118 INC R4
0067 DFD8 119 TT2: DJNZ R7,LLOP30 ;IF A BYTE IS OVER
0069 EE 120 MOV A,R6 ;SAVE THE BYTE TO RAM
006A 14 121 DEC A ;
006B F4 122 CPL A ;
006C 5407 123 ANL A,#07H ;
006E 2A 124 ADD A,R2 ;
A51 MACRO ASSEMBLER DES_SAM 01/31/2008 15:07:52 PAGE 3
006F F8 125 MOV R0,A ;
0070 EC 126 MOV A,R4 ;
0071 F6 127 MOV @R0,A ;
0072 DEC9 128 DJNZ R6,LLOP3 ;IF DATA IS OVER
129
130 ;BEGIN LLOP
0074 7F10 131 MOV R7,#10H
0076 132 LLOP:
133 ;Ri->E
0076 7E08 134 MOV R6,#8
0078 7900 F 135 MOV R1,#Ri_ADDR
007A AA00 F 136 MOV R2,DATA_ADDR
007C 7B1F 137 MOV R3,#1FH
007E 7C00 138 LLOP_1: MOV R4,#0
0080 7D06 139 MOV R5,#6
0082 EC 140 LLOP10: MOV A,R4
0083 23 141 RL A
0084 FC 142 MOV R4,A
0085 EB 143 MOV A,R3
0086 75F008 144 MOV B,#8
0089 84 145 DIV AB
008A 29 146 ADD A,R1
008B F8 147 MOV R0,A ;GET THE ADDRESS OF BYTE IN Ri-1
008C E6 148 MOV A,@R0 ;GET THE VALUE OF BYTE IN Ri-1
008D F8 149 MOV R0,A
008E E5F0 150 MOV A,B
0090 F4 151 CPL A
0091 5407 152 ANL A,#07H
0093 600B 153 JZ N_LLOP2
0095 F5F0 154 MOV B,A
0097 7401 155 MOV A,#1
0099 23 156 LP10: RL A
009A D5F0FC 157 DJNZ B,LP10
009D 020000 F 158 LJMP E_LLOP2
00A0 7401 159 N_LLOP2: MOV A,#1
00A2 58 160 E_LLOP2: ANL A,R0
00A3 6001 161 JZ TT10
00A5 0C 162 INC R4
00A6 0B 163 TT10: INC R3
00A7 BB2002 164 CJNE R3,#20H,WW0
00AA 7B00 165 MOV R3,#0
00AC DDD4 166 WW0: DJNZ R5,LLOP10 ;IF A BYTE IS OVER
00AE EE 167 MOV A,R6 ;SAVE THE BYTE TO RAM
00AF 14 168 DEC A ;
00B0 F4 169 CPL A ;
00B1 5407 170 ANL A,#07H ;
00B3 2A 171 ADD A,R2 ;
00B4 F8 172 MOV R0,A ;
00B5 EC 173 MOV A,R4 ;
00B6 F6 174 MOV @R0,A ;
00B7 1B 175 DEC R3 ;ADJUST THE BIT POSITION
00B8 1B 176 DEC R3 ;
00B9 DEC3 177 DJNZ R6,LLOP_1 ;IF DATA IS OVER
178 ;C0 AND D0->Ki
00BB EF 179 MOV A,R7 ;GET THE SHIF BIT NUMBER
00BC 14 180 DEC A ;
00BD F4 181 CPL A ;
00BE 540F 182 ANL A,#0FH ;
00C0 900000 F 183 MOV DPTR,#SHIF ;
00C3 93 184 MOVC A,@A+DPTR ;
00C4 FB 185 MOV R3,A ;SAVE IN R3
00C5 A200 F 186 MOV C,JA_JE_B
00C7 4050 187 JC DES0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -