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

📄 des.lst

📁 51系列计算DES的方法之一.....,很小的测试程序....
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -