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

📄 des.lst

📁 C51下把DES汇编改为C语言的程序.改进版程序.
💻 LST
📖 第 1 页 / 共 5 页
字号:
                     167             ;Check DES mode
006A ED              168                 Mov         A,    R5        ;Acc      := mode
006B 30E704          169                 Jnb         Acc.7,DesModeOk
006E 120000   F      170                 Call        GErrCrypt       ;Error: wrong mode
0071 03              171                 DB          003h
                     172     
0072 B2E5            173     DesModeOk:  Cpl         Decode
0074 FD              174                 Mov         R5,   A
0075 5430            175                 Anl         A,   #030h      ;Mask Decode and MAC-Bit
0077 7009            176                 Jnz         DesLgOk         ;no len check when MAC or encrypt
0079 EF              177                 Mov         A,    R7        ;Get ByteCount
007A 5407            178                 Anl         A,   #007h      ;James Bond
007C 6004            179                 Jz          DesLgOk
007E 120000   F      180                 Call        GErrCrypt       ;Error: Length not multiple of 8
0081 08              181                 DB          008h
                     182     
0082 ED              183     DesLgOk:    Mov         A,    R5        ;Acc      := mode
0083 6440            184                 Xrl         A,   #040h      ;CBC-Decode
0085 54F0            185                 Anl         A,   #0F0h
0087 7005            186                 Jnz         DesSave         ;No CBC-Decode ?
                     187                                             ;CBC-Decode starts at end of data
0089 EE              188                 Mov         A,    R6        ;Acc      := addr (Block0)
008A 2F              189                 Add         A,    R7        ;Acc      := addr (BlockN) + 8
008B 24F8            190                 Add         A,   #0F8h      ;Acc      := addr (BlockN)
A51 MACRO ASSEMBLER  DES                                                                  09/11/2002 09:44:25 PAGE     4

008D FE              191                 Mov         R6,   A         ;R6       := addr (BlockN)
                     192     
008E C082            193     DesSave:    Push        Dpl
0090 C083            194                 Push        Dph
                     195     
                     196     
                     197     ;********** Function DES **********
                     198     
0092 7B08            199     DESAction:  Mov         R3,  #8         ;Initial permutation IP of 8 bytes
0094 EA              200                 Mov         A,    R2        ;Acc      := addr (D0, C0)
0095 2B              201                 Add         A,    R3        ;Acc      := addr (Output0)
0096 F9              202                 Mov         R1,   A         ;R1       := addr (Output0)
0097 ED              203                 Mov         A,    R5        ;Acc      := Mode
0098 F5F0            204                 Mov         B,    A         ;B-Accu   := Mode
009A 23              205                 Rl          A
009B 33              206                 Rlc         A               ;Carry    := R5.6
009C 82E7            207                 Anl         C,    Acc.7     ;CBC-Encode  => Carry = 1 !
009E 72E6            208                 Orl         C,    Acc.6     ;BuildMac    => Carry = 1 !
00A0 92F0            209                 Mov         0F0h, C         ;B.0 = 1     => ExOr InputData
                     210     
                     211             ;get 8 bytes of data/add padding bytes
00A2 7A80            212     InitPerm:   Mov         R2,  #080h      ;Padding value
00A4 EF              213                 Mov         A,    R7
00A5 6006            214                 Jz          Padding
00A7 1F              215                 Dec         R7              ;ByteCounter
00A8 EE              216                 Mov         A,    R6        ;Acc      := addr (InputI)
00A9 F8              217                 Mov         R0,   A         ;R0       := addr (InputI)
00AA E6              218                 Mov         A,   @R0        ;Acc      := InputI
00AB 8004            219                 SJmp        $+6
00AD CA              220     Padding:    Xch         A,    R2        ;Acc      := PaddingByte
00AE 20F404          221                 Jb          0F4h, $+7       ;BuildMac ?  => Skip Increment
00B1 0E              222                 Inc         R6              ;addr (I) += 1
                     223             ;add previous output if necessary
00B2 30F001          224                 Jnb         0F0h, $+4
00B5 67              225                 Xrl         A,   @R1        ;Acc      ^= OutputI
00B6 7800     F      226                 Mov         R0,  #BM0       ;R0       := addr (Work0), it contains Right0
00B8 7C08            227                 Mov         R4,  #8         ;R4       := shift 8 bits
00BA DB02            228                 Djnz        R3, $+4
00BC 800A            229                 SJmp        InitEnd
                     230             ;permute byte into bitmap area
00BE 09              231                 Inc         R1              ;addr (O) += 1
00BF 33              232                 Rlc         A
00C0 C6              233                 Xch         A,   @R0
00C1 33              234                 Rlc         A
00C2 C6              235                 Xch         A,   @R0
00C3 08              236                 Inc         R0              ;addr (W) += 1
00C4 DCF9            237                 Djnz        R4, $-5
00C6 80DC            238                 SJmp        InitPerm+2
                     239             ;permute last byte
00C8 23              240     InitEnd:    Rl          A
00C9 23              241                 Rl          A
00CA 33              242                 Rlc         A
00CB C6              243                 Xch         A,   @R0
00CC 23              244                 Rl          A
00CD 13              245                 Rrc         A
00CE C6              246                 Xch         A,   @R0
00CF 08              247                 Inc         R0              ;addr (W) += 1
00D0 DCF8            248                 Djnz        R4, $-6
                     249     
                     250             ;load permuted input in calculation area
00D2 A700     F      251                 Mov         @R1,  BM1       ;R1       := addr (Left0)
00D4 19              252                 Dec         R1              ;R1       := addr (Left1)
00D5 A700     F      253                 Mov         @R1,  BM3
00D7 19              254                 Dec         R1              ;R1       := addr (Left2)
00D8 A700     F      255                 Mov         @R1,  BM5
00DA 19              256                 Dec         R1              ;R1       := addr (Left3)
A51 MACRO ASSEMBLER  DES                                                                  09/11/2002 09:44:25 PAGE     5

00DB A700     F      257                 Mov         @R1,  BM7
00DD 19              258                 Dec         R1              ;R1       := addr (Right0)
00DE A700     F      259                 Mov         @R1,  BM0
00E0 19              260                 Dec         R1              ;R1       := addr (Right1)
00E1 A700     F      261                 Mov         @R1,  BM2
00E3 19              262                 Dec         R1              ;R1       := addr (Right2)
00E4 A700     F      263                 Mov         @R1,  BM4
00E6 19              264                 Dec         R1              ;R1       := addr (Right3)
00E7 A700     F      265                 Mov         @R1,  BM6
                     266     
                     267             ;16 rounds DES operation
00E9 E9              268                 Mov         A,    R1        ;Acc      := addr (Output0)
00EA 24F8            269                 Add         A,   #0F8h      ;Acc      := addr (D0, C0)
00EC FA              270                 Mov         R2,   A         ;R2       := addr (D0, C0)
00ED 7B10            271                 Mov         R3,  #16        ;RoundCounter
                     272     
                     273     
00EF 1B              274     OneRound:   Dec         R3              ;Decrement RoundCounter
00F0 EB              275                 Mov         A,    R3        ;Acc      := RoundCounter
00F1 75F007          276                 Mov         B,   #7         ;DivideValue for Shift1Test
00F4 84              277                 Div         AB              ;B-Accu   := RoundCounter mod 7
00F5 ED              278                 Mov         A,    R5        ;Acc      := Parameter2 of APDU
00F6 5430            279                 Anl         A,   #030h      ;Acc5..4  := Decode~, BuildMac
00F8 601D            280                 Jz          RoundKey        ;Decryption ?
                     281     
00FA EA              282                 Mov         A,    R2        ;Acc      := addr (D0, C0)
00FB F8              283                 Mov         R0,   A         ;R0       := addr (D0, C0)
00FC E5F0            284                 Mov         A,    B         ;Acc      := RoundCounter mod 7
00FE 24FF            285                 Add         A,   #0FFh      ;Carry    := Acc != 0  => Shift2
0100 EB              286                 Mov         A,    R3
0101 04              287                 Inc         A
0102 B0E4            288                 Anl         C,   /Acc.4     ;Carry    &= First Round ?
0104 9200     F      289                 Mov         BM0.7,C         ;BM0.7    == 0 ?       => Shift1
0106 E6              290                 Mov         A,   @R0        ;Acc      := D6, C6 << 2 = D0, C0
0107 7C06            291     EncShift2:  Mov         R4,  #6         ;R4       := shift through 7 bytes
0109 F8              292                 Mov         R0,   A         ;R0       := D6, C6 << 2 = D0, C0
010A EA              293                 Mov         A,    R2        ;Acc      := addr (D0, C0)
010B 2C              294                 Add         A,    R4        ;Acc      := addr (D6, C6)
010C C8              295                 Xch         A,    R0        ;Acc      := D6, C6 << 2
010D 03              296                 Rr          A               ;Acc      := D6, C6 << 1
010E 03              297                 Rr          A               ;Acc      := D6, C6
010F C6              298                 Xch         A,   @R0        ;ShiftDown one byte
0110 18              299                 Dec         R0              ;Address  -= 1
0111 DCFC            300                 Djnz        R4, $-2
0113 1000F1   F      301                 Jbc         BM0.7,EncShift2 ;Shift twice ?
0116 F6              302                 Mov         @R0,  A         ;Store D0, C0
                     303     
                     304     
0117                 305     RoundKey:  ;Permutation 36  5 27 61 18 54  9 47    = D6, C6
                     306                ;            44 13 35  6 26 62 17 55    = D5, C5
                     307                ;            52 21 43 14 34  7 25 63    = D4, C4
                     308                ;            60 29 51 22 42 15 33  4    = D3, C3
                     309                ;             3 37 59 30 50 23 41 12    = D2, C2
                     310                ;            11 45  2 38 58 31 49 20    = D1, C1
                     311                ;            19 53 10 46  1 39 57 28    = D0, C0
                     312     
0117 EA              313                 Mov         A,    R2        ;RoundKey := PC_2 (D, C), 8*6 bit
0118 F8              314                 Mov         R0,   A         ;R0       := addr (C0)
0119 E6              315                 Mov         A,   @R0        ;Acc      := D0, C0
011A F500     F      316                 Mov         BM2,  A         ;Bit8
011C 33              317                 Rlc         A
011D F500     F      318                 Mov         BM0,  A         ;Bit1
011F 23              319                 Rl          A
0120 23              320                 Rl          A
0121 F500     F      321                 Mov         BM6,  A         ;Bit53
0123 33              322                 Rlc         A
A51 MACRO ASSEMBLER  DES                                                                  09/11/2002 09:44:25 PAGE     6

0124 F500     F      323                 Mov         BM7,  A         ;Bit46
0126 9200     F      324                 Mov         BM6.0,C         ;Bit39
0128 23              325                 Rl          A
0129 33              326                 Rlc         A
012A 9200     F      327                 Mov         BM7.7,C         ;Bit32
012C 33              328                 Rlc         A
012D F500     F      329                 Mov         BM1,  A         ;Bit15
012F 08              330                 Inc         R0
0130 E6              331                 Mov         A,   @R0        ;Acc      := D1, C1
0131 33              332                 Rlc         A
0132 9200     F      333                 Mov         BM2.6,C         ;Bit23
0134 23              334                 Rl          A
0135 23              335                 Rl          A
0136 33              336                 Rlc         A
0137 F500     F      337                 Mov         BM4,  A         ;Bit47
0139 F500     F      338                 Mov         BM5,  A         ;Bit33
013B 9200     F      339                 Mov         BM5.3,C         ;Bit40

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -