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