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

📄 des.asm

📁 C51下把DES汇编改为C语言的程序.改进版程序.
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        ;16 rounds DES operation
            Mov         A,    R1        ;Acc      := addr (Output0)
            Add         A,   #0F8h      ;Acc      := addr (D0, C0)
            Mov         R2,   A         ;R2       := addr (D0, C0)
            Mov         R3,  #16        ;RoundCounter


OneRound:   Dec         R3              ;Decrement RoundCounter
            Mov         A,    R3        ;Acc      := RoundCounter
            Mov         B,   #7         ;DivideValue for Shift1Test
            Div         AB              ;B-Accu   := RoundCounter mod 7
            Mov         A,    R5        ;Acc      := Parameter2 of APDU
            Anl         A,   #030h      ;Acc5..4  := Decode~, BuildMac
            Jz          RoundKey        ;Decryption ?

            Mov         A,    R2        ;Acc      := addr (D0, C0)
            Mov         R0,   A         ;R0       := addr (D0, C0)
            Mov         A,    B         ;Acc      := RoundCounter mod 7
            Add         A,   #0FFh      ;Carry    := Acc != 0  => Shift2
            Mov         A,    R3
            Inc         A
            Anl         C,   /Acc.4     ;Carry    &= First Round ?
            Mov         BM0.7,C         ;BM0.7    == 0 ?       => Shift1
            Mov         A,   @R0        ;Acc      := D6, C6 << 2 = D0, C0
EncShift2:  Mov         R4,  #6         ;R4       := shift through 7 bytes
            Mov         R0,   A         ;R0       := D6, C6 << 2 = D0, C0
            Mov         A,    R2        ;Acc      := addr (D0, C0)
            Add         A,    R4        ;Acc      := addr (D6, C6)
            Xch         A,    R0        ;Acc      := D6, C6 << 2
            Rr          A               ;Acc      := D6, C6 << 1
            Rr          A               ;Acc      := D6, C6
            Xch         A,   @R0        ;ShiftDown one byte
            Dec         R0              ;Address  -= 1
            Djnz        R4, $-2
            Jbc         BM0.7,EncShift2 ;Shift twice ?
            Mov         @R0,  A         ;Store D0, C0


RoundKey:  ;Permutation 36  5 27 61 18 54  9 47    = D6, C6
           ;            44 13 35  6 26 62 17 55    = D5, C5
           ;            52 21 43 14 34  7 25 63    = D4, C4
           ;            60 29 51 22 42 15 33  4    = D3, C3
           ;             3 37 59 30 50 23 41 12    = D2, C2
           ;            11 45  2 38 58 31 49 20    = D1, C1
           ;            19 53 10 46  1 39 57 28    = D0, C0

            Mov         A,    R2        ;RoundKey := PC_2 (D, C), 8*6 bit
            Mov         R0,   A         ;R0       := addr (C0)
            Mov         A,   @R0        ;Acc      := D0, C0
            Mov         BM2,  A         ;Bit8
            Rlc         A
            Mov         BM0,  A         ;Bit1
            Rl          A
            Rl          A
            Mov         BM6,  A         ;Bit53
            Rlc         A
            Mov         BM7,  A         ;Bit46
            Mov         BM6.0,C         ;Bit39
            Rl          A
            Rlc         A
            Mov         BM7.7,C         ;Bit32
            Rlc         A
            Mov         BM1,  A         ;Bit15
            Inc         R0
            Mov         A,   @R0        ;Acc      := D1, C1
            Rlc         A
            Mov         BM2.6,C         ;Bit23
            Rl          A
            Rl          A
            Rlc         A
            Mov         BM4,  A         ;Bit47
            Mov         BM5,  A         ;Bit33
            Mov         BM5.3,C         ;Bit40
            Rlc         A
            Mov         BM3,  A         ;Bit16
            Rl          A
            Rlc         A
            Mov         BM3.7,C         ;Bit2
            Inc         R0
            Mov         A,   @R0        ;Acc      := D2, C2
            Rlc         A
            Mov         BM0.1,C         ;Bit24
            Rlc         A
            Mov         BM5.7,C         ;Bit48
            Rlc         A
            Mov         BM0.7,C         ;Bit17
            Rlc         A
            Mov         BM4.6,C         ;Bit41
            Rlc         A
            Mov         BM1.7,C         ;Bit10
            Rlc         A
            Mov         BM6.2,C         ;Bit34
            Rlc         A
            Mov         BM1.2,C         ;Bit3
            Rlc         A
            Mov         BM4.3,C         ;Bit55
            Inc         R0
            Mov         A,   @R0        ;Acc      := D3, C3
            Rl          A
            Rlc         A
            Mov         BM6.7,C         ;Bit49
            Rl          A
            Rlc         A
            Mov         BM7.3,C         ;Bit42
            Rlc         A
            Mov         BM0.0,C         ;Bit11
            Rl          A
            Rlc         A
            Mov         BM2.1,C         ;Bit4
            Rlc         A
            Mov         BM6.1,C         ;Bit56
            Inc         R0
            Mov         A,   @R0        ;Acc      := D4, C4
            Rlc         A
            Mov         BM2.2,C         ;Bit26
            Rlc         A
            Mov         BM7.4,C         ;Bit50
            Rlc         A
            Mov         BM2.7,C         ;Bit19
            Rl          A
            Rlc         A
            Mov         BM2.0,C         ;Bit12
            Rlc         A
            Mov         BM7.5,C         ;Bit36
            Rlc         A
            Mov         BM0.3,C         ;Bit5
            Rlc         A
            Mov         BM7.6,C         ;Bit29
            Inc         R0
            Mov         A,   @R0        ;Acc      := D5, C5
            Rlc         A
            Mov         BM3.4,C         ;Bit27
            Rlc         A
            Mov         BM5.4,C         ;Bit51
            Rlc         A
            Mov         BM3.5,C         ;Bit20
            Rlc         A
            Mov         BM6.6,C         ;Bit44
            Rlc         A
            Mov         BM3.6,C         ;Bit13
            Rlc         A
            Mov         BM4.1,C         ;Bit37
            Rlc         A
            Mov         BM1.5,C         ;Bit6
            Rlc         A
            Mov         BM5.2,C         ;Bit30
            Inc         R0
            Mov         A,   @R0        ;Acc      := D6, C6
            Rlc         A
            Mov         BM1.3,C         ;Bit28
            Rlc         A
            Mov         BM4.7,C         ;Bit52
            Rlc         A
            Mov         BM1.6,C         ;Bit21
            Rlc         A
            Mov         BM5.5,C         ;Bit45
            Rlc         A
            Mov         BM0.6,C         ;Bit14
            Rl          A
            Rlc         A
            Mov         BM3.3,C         ;Bit7
            Rlc         A
            Mov         BM4.0,C         ;Bit31


            Mov         A,    R5        ;Acc      := Parameter2 of APDU
            Anl         A,   #030h      ;Acc5..4  := Decode~, BuildMac
            Jnz         InitExpand

            Mov         A,    R2        ;Acc      := addr (D0, C0)
            Mov         R0,   A         ;R0       := addr (D0, C0)
            Mov         A,    B         ;Acc      := RoundCounter mod 7
            Dec         A
            Add         A,   #0FFh      ;Carry    := Acc != 0  => Shift2
            Mov         A,    R3
            Jnz         DecShift2-1     ;Last Round ?
            Clr         C               ;Carry    == 0         => Shift1
            Mov         A,   @R0        ;Acc      := D0, C0
DecShift2:  Mov         R4,  #6         ;R4       := shift through 7 bytes
            Inc         R0              ;Address  += 1
            Xch         A,   @R0        ;ShiftUp one byte
            Djnz        R4, $-2
            Mov         R0,   A         ;R0       := D0, C0 >> 2 = D6, C6
            Mov         A,    R2        ;Acc      := addr (D0, C0)
            Xch         A,    R0        ;Acc      := D0, C0 >> 2
            Rl          A               ;Acc      := D0, C0 >> 1
            Rl          A               ;Acc      := D0, C0
            Jbc         PSW.7,DecShift2 ;Shift twice ?
            Mov         @R0,  A         ;Store D0, C0


InitExpand: Mov         R0,  #BM0       ;R0       := addr (first SBoxValue)
            Mov         R4,  #4         ;Half number of    SBoxes
            Mov         Dptr,#SBoxes    ;Dptr     := addr (SBoxes)
            Mov         A,   @R1        ;Acc      := Right3
            Inc         R1
            Inc         R1
            Inc         R1              ;R1       := addr (Right0)

ExpXorSBox: XchD        A,   @R1        ;Acc3..0  := RightI,    4 bits
            Xch         A,   @R0        ;Acc      := RoundKey,  bits 7, 6, 3..0
            Xrl         A,   @R0        ;Acc      := SBoxIndex, bits 7, 6, 3..0
            Swap        A               ;Acc7..2  := SBoxIndex, 6 bits
            Anl         A,   #0FCh      ;Mask        SBoxIndex
            MovC        A, @A+Dptr      ;Acc      := SBoxValue, LowNibble valid
            Xch         A,   @R0        ;Acc3..0  := RightI,    4 bits
            Inc         R0
            XchD        A,   @R1        ;Rebuild    RightI
            Mov         A,   @R1        ;Acc7..0  := RightI
            Xrl         A,   @R0        ;Acc7..2  := SBoxIndex, 6bits
            Anl         A,   #0FCh      ;Mask        SBoxIndex
            MovC        A, @A+Dptr      ;Acc      := SBoxValue, HighNibble valid
            Mov         @R0,  A
            Inc         R0
            Mov         A,   @R1        ;Acc7..0  := RightI
            Dec         R1
            Inc         Dptr
            Djnz        R4, ExpXorSBox

            Mov         A,    R3        ;Acc      := RoundCounter
            Jnb         Acc.0,$+7       ;Odd Round ?
            Mov         A,    R1        ;Acc      := addr (Right3) -1
            Add         A,   #8         ;Address  += 8
            Mov         R1,   A         ;R1       := addr (Left0)

            Mov         C, BM1.6        ;P(B)1    := B7, Right := P(B) ExOr Left
            Rrc         A
            Mov         C, BM4.3        ;P(B)2    := B20
            Rrc         A
            Mov         C, BM5.4        ;P(B)3    := B21
            Rrc         A
            Mov         C, BM7.4        ;P(B)4    := B29
            Rrc         A
            Mov         C, BM2.3        ;P(B)5    := B12
            Rrc         A
            Mov         C, BM6.3        ;P(B)6    := B28
            Rrc         A
            Mov         C, BM4.0        ;P(B)7    := B17
            Rrc         A
            Mov         C, BM0.0        ;P(B)8    := B1
            Rrc         A
            Xrl         A,   @R1        ;Acc      := new Right0
            Mov         @R1,  A         ;Left0    := new Right0
            Mov         C, BM3.6        ;P(B)9    := B15
            Rrc         A
            Mov         C, BM5.6        ;P(B)10   := B23
            Rrc         A
            Mov         C, BM6.1        ;P(B)11   := B26
            Rrc         A
            Mov         C, BM1.4        ;P(B)12   := B5
            Rrc         A
            Mov         C, BM4.1        ;P(B)13   := B18
            Rrc         A
            Mov         C, BM7.6        ;P(B)14   := B31
            Rrc         A
            Mov         C, BM2.1        ;P(B)15   := B10
            Rrc         A
            Mov         C, BM0.1        ;P(B)16   := B2
            Rrc         A
            Dec         R1
            Xrl         A,   @R1        ;Acc      := new Right1
            Mov         @R1,  A         ;Left1    := new Right1
            Mov         C, BM1.7        ;P(B)17   := B8
            Rrc         A
            Mov         C, BM5.7        ;P(B)18   := B24
            Rrc         A

⌨️ 快捷键说明

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