📄 des.lst
字号:
A51 MACRO ASSEMBLER DES 09/18/2002 08:53:03 PAGE 1
MACRO ASSEMBLER A51 V6.10
OBJECT MODULE PLACED IN .\des.OBJ
ASSEMBLER INVOKED BY: C:\KEIL\C51\BIN\A51.EXE .\des.asm SET(LARGE) DEBUG EP
LOC OBJ LINE SOURCE
1 ;****************************************************************************
2 ; void DES(char mode, char data *text,char xdata *key)
3 ; R7, R5, R2,R3
4 ; MOV R7,A
5 ; MOV R5,#LOW text?12
6 ; MOV R2,#HIGH key
7 ; MOV R3,#LOW key
8 ; LCALL _DES
9 ;****************************************************************************
10 ;extrn IData (CalcArea)
11 extrn Data (BM0)
12 extrn Data (BM1)
13 extrn Data (BM2)
14 extrn Data (BM3)
15 extrn Data (BM4)
16 extrn Data (BM5)
17 extrn Data (BM6)
18 extrn Data (BM7)
19
20 public _DES
21 ;**** Definitions ****
00E5 22 Decode equ Acc.5 ;Decode-/Encode~-Flag
00E4 23 MAC equ Acc.4 ;MAC-Flag
24
25 DES_Proc segment code
26 ?ID?XADES SEGMENT IDATA
27
0000 28 R2MAC: ;Error messages
0000 29 LenErr:
0000 30 ModeErr:
---- 31 rseg ?ID?XADES
0000 32 CalcArea: DS 16
33
---- 34 rseg DES_Proc
0000 35 _DES:
0000 EF 36 Mov A, R7
0001 CD 37 Xch A, R5
0002 7F08 38 Mov R7,#08h
0004 C9 39 Xch A, R1
40 ;********** Function DES **********
41
42 ;R0 O Pointer, general purpose, output = R1+R7 (BuildMac)
43 ;R1 I/O Pointer to 8-byte input data, output = R2+8
44 ;R2 Pointer to 8-byte working area for D-, C-Values
45 ;R3 O RoundCounter, output = 8
46 ;R4 Counter, general purpose
47 ;R5 I, u Parameter P2 of APDU
48 ; b7b6
49 ; 0 0 ECB
50 ; 0 1 CBC
51 ; 1 x reserved
52 ; b5
53 ; 0 encrypt
54 ; 1 decrypt
55 ; b4
56 ; 1 build MAC
57 ;R6 InputPointer
58 ;R7 I ByteCount
A51 MACRO ASSEMBLER DES 09/18/2002 08:53:03 PAGE 2
59 ;B TestRegister for Shift1Test of D-, C-Values
60 ;Dptr I u Pointer to 64/56-bit DES-Key in TLV-Format
61 ;Carry O 0 = Normal Termination
62 ;Abbreviations: I = Input, O = Output, u = unchanged
63 ;Two Stack-Entries neccessary
64 ;Key format: sequence of TLV records
65 ; 1st record: key handling information
66 ; 2nd record: DES key
67 ; 3rd record: initial value (optional)
68
0005 ED 69 Mov A, R5 ;Mode
0006 30E407 70 Jnb MAC,DES_
0009 30E504 71 Jnb Decode,DES_
72 ;separate MAC at the end of datafield
000C EF 73 Mov A, R7 ;Acc := #(Data) + #(MAC)
000D 24F8 74 Add A, #0F8h ;Acc -= #(MAC)
000F FF 75 Mov R7, A ;R7 := true DataLength
0010 76 DES_:
0010 8A83 77 Mov DPH, R2
0012 8B82 78 Mov DPL, R3
0014 7B08 79 Mov R3, #8 ;D, C := PC_1 (DES-Key), 2*28 bit
80 ;calculate key address (adrC = dptr+R2)
81
0016 7A00 82 MOV R2, #00H
83 ; Mov A, #1
84 ; MovC A, @A+Dptr ;Acc := HeaderLength
85 ; Add A, #4 ;Acc := addr (Key0)
86 ; Mov R2, A ;R2 := KeyByteOffset
87 ;address of 16 bytes calculation area
0018 7400 F 88 Mov A, #CalcArea ;Acc := addr
001A C9 89 Xch A, R1 ;Acc := addr (Input0)
001B FE 90 Mov R6, A ;R6 := addr (Input0)
91 ;write permuted key to bitmap area
001C 7800 F 92 DesGetKey: Mov R0, #BM0 ;R0 := addr (C0)
001E EA 93 Mov A, R2 ;Acc := KeyByteOffset
94
95 ; MovC A, @A+Dptr ;Acc := ith byte of DES-Key
001F 120000 F 96 lcall GetKey
97
0022 0A 98 Inc R2
0023 7C07 99 Mov R4, #7 ;R4 := shift bits 6..0, bit 7 not used
0025 33 100 Rlc A
0026 C6 101 Xch A, @R0
0027 33 102 Rlc A
0028 C6 103 Xch A, @R0
0029 08 104 Inc R0
002A DCF9 105 Djnz R4, $-5
002C DBEE 106 Djnz R3, DesGetKey
107
002E E500 F 108 Mov A, BM6 ;Acc := D0
0030 C500 F 109 Xch A, BM4 ;Acc := D2
0032 F500 F 110 Mov BM6, A ;Store D2 at correct location
111 ;2nd permutation and copy to calculation area
0034 7800 F 112 Mov R0, #BM0 ;R0 := addr (C0)
0036 7B07 113 Mov R3, #7 ;R3 := permutate 7 bytes
114
0038 EB 115 SetKeyNxt: Mov A, R3 ;Acc := addr (D6, C6) - R1 + 1
0039 FC 116 Mov R4, A ;R4 := ByteCounter
003A E6 117 Mov A, @R0 ;Acc := next StandardPermutationByte
003B 08 118 Inc R0
003C 13 119 Rrc A
003D C7 120 Xch A, @R1
003E 13 121 Rrc A
003F 13 122 Rrc A
0040 C7 123 Xch A, @R1
0041 09 124 Inc R1
A51 MACRO ASSEMBLER DES 09/18/2002 08:53:03 PAGE 3
0042 DCF8 125 Djnz R4, $-6 ;R1 == addr (D6, C6) +1 ?
126
0044 FC 127 Mov R4, A ;Save Accu
0045 E9 128 Mov A, R1 ;Acc := addr (D6, C6) + 1
0046 24F9 129 Add A, #0F9h ;Acc := addr (D0, C0)
0048 F9 130 Mov R1, A ;R1 := addr (D0, C0)
0049 C3 131 Clr C
004A 7408 132 Mov A, #8 ;Acc := all bits
004C 9B 133 SubB A, R3 ;Acc := remaining bits to shift
004D CC 134 Xch A, R4 ;Acc := remaining bits
004E 13 135 Rrc A
004F C7 136 Xch A, @R1
0050 13 137 Rrc A
0051 13 138 Rrc A
0052 C7 139 Xch A, @R1
0053 09 140 Inc R1
0054 DCF8 141 Djnz R4, $-6 ;More bits to shift ?
0056 DBE0 142 Djnz R3, SetKeyNxt ;All bytes permutated ?
143
0058 C3 144 CLR C
0059 7B08 145 MOV R3,#08h
146 ; Call VecExist ;initial value to copy?
147 ;C = 1: yes
148 ; = 0: no
149 ;R3 = #8
150 ;copy 0 or initial value to calculation area
005B 0A 151 Inc R2 ;R2 := addr (Vector0) - 1
005C E4 152 Clr A
153
005D 5003 154 Jnc $+5
005F 0A 155 Inc R2
0060 EA 156 Mov A, R2 ;Acc := addr (VectorI)
0061 93 157 MovC A, @A+Dptr ;Acc := VectorI
158
0062 09 159 Inc R1 ;addr (O) += 1
0063 F7 160 Mov @R1, A
0064 DBF7 161 Djnz R3, $-7
162
0066 E9 163 Mov A, R1 ;Acc := addr (Output7)
0067 24F1 164 Add A, #0F1h ;Acc := addr (D0, C0)
0069 FA 165 Mov R2, A ;R2 := addr (D0, C0)
166
167 ;Check DES mode
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -