des.lst

来自「51系列计算DES的方法之一.....,很小的测试程序....」· LST 代码 · 共 896 行 · 第 1/5 页

LST
896
字号
022A 13              518                 Rrc         A
022B A200     F      519                 Mov         C, BM4.1        ;P(B)13   := B18
022D 13              520                 Rrc         A
A51 MACRO ASSEMBLER  DES                                                                  09/18/2002 08:53:03 PAGE     9

022E A200     F      521                 Mov         C, BM7.6        ;P(B)14   := B31
0230 13              522                 Rrc         A
0231 A200     F      523                 Mov         C, BM2.1        ;P(B)15   := B10
0233 13              524                 Rrc         A
0234 A200     F      525                 Mov         C, BM0.1        ;P(B)16   := B2
0236 13              526                 Rrc         A
0237 19              527                 Dec         R1
0238 67              528                 Xrl         A,   @R1        ;Acc      := new Right1
0239 F7              529                 Mov         @R1,  A         ;Left1    := new Right1
023A A200     F      530                 Mov         C, BM1.7        ;P(B)17   := B8
023C 13              531                 Rrc         A
023D A200     F      532                 Mov         C, BM5.7        ;P(B)18   := B24
023F 13              533                 Rrc         A
0240 A200     F      534                 Mov         C, BM3.5        ;P(B)19   := B14
0242 13              535                 Rrc         A
0243 A200     F      536                 Mov         C, BM7.7        ;P(B)20   := B32
0245 13              537                 Rrc         A
0246 A200     F      538                 Mov         C, BM6.2        ;P(B)21   := B27
0248 13              539                 Rrc         A
0249 A200     F      540                 Mov         C, BM0.2        ;P(B)22   := B3
024B 13              541                 Rrc         A
024C A200     F      542                 Mov         C, BM2.0        ;P(B)23   := B9
024E 13              543                 Rrc         A
024F A200     F      544                 Mov         C, BM4.2        ;P(B)24   := B19
0251 13              545                 Rrc         A
0252 19              546                 Dec         R1
0253 67              547                 Xrl         A,   @R1        ;Acc      := new Right2
0254 F7              548                 Mov         @R1,  A         ;Left2    := new Right2
0255 A200     F      549                 Mov         C, BM3.4        ;P(B)25   := B13
0257 13              550                 Rrc         A
0258 A200     F      551                 Mov         C, BM7.5        ;P(B)26   := B30
025A 13              552                 Rrc         A
025B A200     F      553                 Mov         C, BM1.5        ;P(B)27   := B6
025D 13              554                 Rrc         A
025E A200     F      555                 Mov         C, BM5.5        ;P(B)28   := B22
0260 13              556                 Rrc         A
0261 A200     F      557                 Mov         C, BM2.2        ;P(B)29   := B11
0263 13              558                 Rrc         A
0264 A200     F      559                 Mov         C, BM0.3        ;P(B)30   := B4
0266 13              560                 Rrc         A
0267 A200     F      561                 Mov         C, BM6.0        ;P(B)31   := B25
0269 13              562                 Rrc         A
026A A200     F      563                 Mov         C, BM3.7        ;P(B)32   := B16
026C 13              564                 Rrc         A
026D 19              565                 Dec         R1
026E 67              566                 Xrl         A,   @R1        ;Acc      := new Right3
026F F7              567                 Mov         @R1,  A         ;Left3    := new Right3
                     568     
0270 EB              569                 Mov         A,    R3        ;Acc      := RoundCounter
0271 6003            570                 Jz          PreOutput       ;Ready Rounds ?
0273 020000   F      571                 Jmp         OneRound        ;Next  Round  !
                     572     
                     573             ;Normalize output of 16 rounds
0276 8700     F      574     PreOutput:  Mov         BM7, @R1        ;BM7      := Right3
0278 09              575                 Inc         R1
0279 8700     F      576                 Mov         BM5, @R1        ;BM5      := Right2
027B 09              577                 Inc         R1
027C 8700     F      578                 Mov         BM3, @R1        ;BM3      := Right1
027E 09              579                 Inc         R1
027F 8700     F      580                 Mov         BM1, @R1        ;BM1      := Right0
0281 09              581                 Inc         R1
0282 8700     F      582                 Mov         BM6, @R1        ;BM6      := Left3
0284 09              583                 Inc         R1
0285 8700     F      584                 Mov         BM4, @R1        ;BM4      := Left2
0287 09              585                 Inc         R1
0288 8700     F      586                 Mov         BM2, @R1        ;BM2      := Left1
A51 MACRO ASSEMBLER  DES                                                                  09/18/2002 08:53:03 PAGE    10

028A 09              587                 Inc         R1
028B 8700     F      588                 Mov         BM0, @R1        ;BM0      := Left0
                     589     
028D 7B08            590                 Mov         R3,  #8         ;Inverse initial permutation IP^-1
028F 7800     F      591                 Mov         R0,  #BM0
                     592     
0291 E6              593     InvItPerm:  Mov         A,   @R0
0292 08              594                 Inc         R0
0293 23              595                 Rl          A               ;Due to Left and Right notation
0294 7C08            596                 Mov         R4,  #8         ;which are rotated right 1 bit
0296 13              597                 Rrc         A               ;in comparision with Standard
0297 C7              598                 Xch         A,   @R1
0298 33              599                 Rlc         A
0299 C7              600                 Xch         A,   @R1
029A 19              601                 Dec         R1
029B DCF9            602                 Djnz        R4, $-5
                     603     
029D E9              604                 Mov         A,    R1        ;Acc      := addr (Output0) - 1
029E 2408            605                 Add         A,   #8         ;Acc      := addr (Output7)
02A0 F9              606                 Mov         R1,   A         ;R1       := addr (Output7)
02A1 DBEE            607                 Djnz        R3, InvItPerm
                     608     
02A3 E7              609                 Mov         A,   @R1        ;Acc      := Output7 << 2
02A4 03              610                 Rr          A
02A5 03              611                 Rr          A
02A6 F7              612                 Mov         @R1,  A
                     613             ;Result of DES operation available
02A7 EE              614                 Mov         A,    R6        ;Acc      := addr (Input0) + 8
02A8 F8              615                 Mov         R0,   A         ;R0       := addr (Input0) + 8
02A9 C3              616                 Clr         C
                     617     
02AA ED              618                 Mov         A,    R5
02AB 20E40C          619                 Jb          Acc.4, TestEnd  ;BuildMac ?
02AE 23              620                 Rl          A
02AF 33              621                 Rlc         A
02B0 B0E7            622                 Anl         C,   /Acc.7     ;Carry    := Mode is CBC decode
                     623     
02B2 7B08            624                 Mov         R3,  #8         ;Copy data to input location
02B4 E7              625                 Mov         A,   @R1        ;Acc      := OutputI
02B5 19              626                 Dec         R1
02B6 18              627                 Dec         R0
02B7 F6              628                 Mov         @R0,  A
02B8 DBFA            629                 Djnz        R3, $-4
                     630     
02BA EF              631     TestEnd:    Mov         A,    R7
02BB 6013            632                 Jz          DesEnd          ;End of input data reached?
02BD 500E            633                 Jnc         NoCbcDec
02BF EE              634                 Mov         A,    R6        ;For CBC decode set pointer to next block
02C0 24F0            635                 Add         A,   #0F0h
02C2 FE              636                 Mov         R6,   A
02C3 F9              637                 Mov         R1,   A
02C4 7B08            638                 Mov         R3,  #8         ;and XOR it with previous output
02C6 E7              639                 Mov         A,   @R1
02C7 66              640                 Xrl         A,   @R0
02C8 F6              641                 Mov         @R0,  A
02C9 08              642                 Inc         R0
02CA 09              643                 Inc         R1
02CB DBF9            644                 Djnz        R3, $-5
02CD 020000   F      645     NoCbcDec:   LJmp        DesAction
                     646     
02D0 D083            647     DesEnd:     Pop         Dph             ;Restore DataPointer
02D2 D082            648                 Pop         Dpl
02D4 5017            649                 Jnc         DesRet
02D6 120000   F      650                 Call        VecExist
02D9 5012            651                 Jnc         DesRet
                     652     
A51 MACRO ASSEMBLER  DES                                                                  09/18/2002 08:53:03 PAGE    11

02DB 7401            653                 Mov         A,   #1         ;CBC decode only
                     654     
                     655     ;            MovC        A, @A+Dptr      ;Acc      := HeaderLength
02DD 120000   F      656                 lcall       GetKey          
                     657     
02E0 240E            658                 Add         A,   #14        ;Acc      := index (Vector0)
02E2 F9              659                 Mov         R1,   A
02E3 E9              660                 Mov         A,    R1
                     661     ;            MovC        A, @A+Dptr      ;Acc      := VectorI
02E4 120000   F      662                 lcall       GetKey                      
                     663     
02E7 09              664                 Inc         R1
02E8 66              665                 Xrl         A,   @R0
02E9 F6              666                 Mov         @R0,  A
02EA 08              667                 Inc         R0
02EB DBF8            668                 Djnz        R3, $-6
                     669     
02ED 7B08            670     DesRet:     Mov         R3,  #8
02EF EA              671                 Mov         A,    R2        ;Acc      := addr (D0, C0)
02F0 2B              672                 Add         A,    R3        ;Acc      := addr (Output0)
02F1 F9              673                 Mov         R1,   A         ;R1       := addr (Output0)
02F2 ED              674                 Mov         A,    R5        ;Acc      := Mode
02F3 30E40D          675                 Jnb         Acc.4,NoMAC
                     676             ;MAC verification/copy MAC to end of data
02F6 A2E5            677                 Mov         C,    Acc.5
02F8 E7              678                 Mov         A,   @R1
02F9 4003            679                 Jc          $+5
02FB 66              680                 Xrl         A,   @R0
02FC 700B            681                 Jnz         MacErr
02FE F6              682                 Mov         @R0,  A
02FF 08              683                 Inc         R0
0300 09              684                 Inc         R1
0301 DBF5            685                 Djnz        R3, $-9
                     686     
0303 EE              687     NoMAC:      Mov         A,    R6
0304 F9              688                 Mov         R1,   A
0305 7408            689                 Mov         A,   #8
0307 C3              690                 Clr         C
0308 22              691                 Ret                         ;Normal Termination  => Carry == 0 !

⌨️ 快捷键说明

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