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 + -
显示快捷键?