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

📄 at88scxx.asm

📁 Atmel公司推出了最新的加密芯片AT88SC0104C~25616C系列
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        NOP
        NOP
        NOP
        CLR  SCL
        NOP
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        NOP
        CLR  SCL
        NOP
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        NOP
        CLR  SCL
        NOP
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        NOP
        CLR  SCL
        NOP
        NOP
        NOP

        SETB SDA
        NOP
        NOP
        NOP
	SETB SCL
        NOP
	NOP
        NOP
	CLR SDA
	NOP
        NOP
        NOP
        NOP
	CLR SCL
        NOP
        NOP
        NOP
        RET
;---------SMSTOP-------------
SMSTOP:	CLR SCL           ;SMSTOP
	NOP
        NOP
        NOP
	CLR SDA
	NOP
	NOP
        NOP
	SETB SCL
	NOP
	NOP
	NOP
	SETB SDA
        NOP
        NOP
        NOP
        RET
;%%%%%%%%%%%%%%%%%%%%CRYPTO_BLOCK%%%%%%%%%%%%%%%%
CRYPTO_BLOCK:
CRYPTO_BLOCK_INITIAL:  ;A OR GPAOI      OUTPUT
              MOV A,R5
              ADD A,#0BH
              MOV R0,A ;DATAIN
BYTE_DEFINITION:
R_PARAMETER_DEFINITION:  ;4:0 BIT
S_PARAMETER_DEFINITION:  ;7 BIT
T_PARAMETER_DEFINITION:  ;5 BIT  7:3
RESET_STATUS:
      MOV B,#1DH
CLR_IN:
      MOV @R0,#00H
      INC R0
      DJNZ B,CLR_IN
      RET

CRYPTO_DATA:  ;I=0,I++,I<4
      MOV A,R5
      ADD A,#0BH
      MOV R0,A  ;DATAIN
      MOV A,@R0 ;MOV R0,#0B0H ;DATAIN  ;MOV @R0,A
      INC R0    ;MOV R1,#0B2H ;GPA-BYTE
      XRL A,@R0
      INC R0
      MOV @R0,A ;MOV R0,#0C9H  ;DIN_GPA=DATAIN XRL GPA_BYTE

      MOV A,R0
      MOV R1,A
R_I0:               ;4-0
      MOV A,@R0     ;DIN_GPA
      ANL A,#1FH
      INC R1
      MOV @R1,A
S_I_O:               ;3-0 7-5
      MOV A,@R0
      SWAP A
      CLR C
      RRC A
      INC R1
      MOV @R1,A
T_I_0:
      MOV A,@R0     ;7-3
      ANL A,#0F8H
      RR A
      RR A
      RR A
      INC R1
      MOV @R1,A
R_POLYNOMIAL:
      INC R1
      MOV A,R1
      MOV R0,A
      ADD A,#07H
      MOV B,A   ;R_SUM ADDR ;R_SUM=(RD+{RG[3:0],RG[4]} ) MOD 31*
      MOV A,@R0 ;RG
      MOV C,ACC.4
      ANL A,#0FH
      RLC A
      INC R1
      INC R1
      INC R1
      ADD A,@R1;RD

      JNB ACC.5,R_MOVE
      CLR ACC.5
      INC A
R_MOVE:
      MOV R1,B
      MOV @R1,A ;R_SUM

      MOV A,R0  ;RF->RG
      MOV R1,A
      INC R1
      MOV A,@R1
      MOV @R0,A ;RG

      INC R1;RE->RF
      MOV A,@R1
      INC R0
      MOV @R0,A;RF

      INC R1;RD->RE
      INC R0
      MOV A,@R1
      MOV @R0,A ;RE
;--------------------   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      MOV A,B
      SUBB A,#0AH
      MOV R1,A
      MOV A,@R1;R_I
      MOV B,A
      MOV A,R1
      ADD A,#07H
      MOV R1,A
      MOV A,B
      XRL A,@R1 ;RC
      INC R0
      MOV @R0,A ;RD=RC XOR RI

      INC R1;RB->RC
      MOV A,@R1
      INC R0;RC
      MOV @R0,A

      INC R1;RA>RB
      MOV A,@R1
      INC R0
      MOV @R0,A ;RB

      INC R1;R_SUM>RA
      MOV A,@R1
      INC R0;RA
      MOV @R0,A
S_POLYNOMIAL:
      INC R1
      MOV A,R1
      ADD A,#07H
      MOV B,A;S_SUM
      MOV A,@R1
      MOV C,ACC.6
      ANL A,#3FH
      RLC A
      INC R0
      INC R0
      INC R0;SF
      ADD A,@R0

      JNB ACC.7,S_MOVE
      CLR ACC.7
      INC A
S_MOVE:
      MOV R1,B;MOV R1,#0CBH  ;S_SUM=(SF+{SG[5:0],SG[6]}) MOD 127*
      MOV @R1,A

      MOV A,R1
      SUBB A,#06H
      MOV R1,A;SF>SG
      MOV A,@R1;SG
      DEC R0
      MOV @R0,A

      MOV A,R1  ;S_I
      SUBB A,#0BH
      MOV R1,A
      MOV A,@R1
      INC R0;SE
      INC R0
      XRL A,@R0
      DEC R0;MOV R1,#0C1H  ;SF=S_I XOR SE
      MOV @R0,A

      MOV A,R1
      ADD A,#0DH;SD>SE
      MOV R1,A
      MOV A,@R1
      INC R0
      MOV @R0,A;SE

      INC R1 ;SC>SD
      MOV A,@R1
      INC R0 ;SD
      MOV @R0,A

      INC R1 ;SB>SC
      MOV A,@R1
      INC R0 ;SC
      MOV @R0,A

      INC R1  ;SA>SB
      MOV A,@R1
      INC R0 ;SB
      MOV @R0,A

      INC R1  ;S_SUM>SA
      MOV A,@R1
      INC R0  ;SA
      MOV @R0,A
T_POLYNOMIAL:
      INC R1 ;TE
      MOV B,R1
      MOV A,@R1
      INC R1 ;TC
      INC R1
      ADD A,@R1    ;TE+TC

      JNB ACC.5,T_MOVE
      CLR ACC.5
      INC A
T_MOVE:
      INC R1 ;T_SUM
      INC R1
      INC R1
      MOV @R1,A

      MOV R1,B
      INC R1;TD>TE
      MOV A,@R1;TE
      MOV R0,B
      MOV @R0,A

      INC R1  ;TC>TD
      INC R0  ;TD
      MOV A,@R1
      MOV @R0,A

      MOV A,R1 ;T_I
      MOV B,R1
      SUBB A,#13H
      MOV R1,A
      MOV A,@R1
      MOV R1,B
      INC R1  ;TB
      XRL A,@R1
      INC R0  ;TC=TB XRL TI
      MOV @R0,A

      INC R1  ;TA>TB
      MOV A,@R1
      INC R0  ;TB
      MOV @R0,A

      INC R1  ;T_SUM>TA
      MOV A,@R1
      INC R0  ;TA
      MOV @R0,A
      RET

OUTPUT_STAGE:
     MOV A,R0  ;IF SA[i]=1往下,ELSE JMP CALCU   I(0-3)
     SUBB A,#06H
     MOV R0,A
     MOV A,@R0

     JB ACC.0,CALCU
     MOV A,R0
     SUBB A,#08H
     MOV R1,A
     MOV A,@R1 ;RA
     MOV R3,A

     MOV A,R0
     SUBB A,#0CH
     MOV R1,A
     MOV A,@R1   ;RE

     MOV A,R3
     XRL A,@R1
     ANL A,#01H
     MOV B,A
     JMP CALCU_I1
CALCU:
     MOV A,R0
     ADD A,#06H
     MOV R1,A ;TA
     MOV A,@R1
     MOV R3,A

     MOV A,R0  ;TD
     ADD A,#03H
     MOV R1,A
     MOV A,R3
     XRL A,@R1
     ANL A,#01H
     MOV B,A
CALCU_I1:;IF SA[i]=1往下,ELSE JMP CALCU   I(0>3)
     MOV A,@R0
     JB ACC.1,CALCU1

     MOV A,R0
     SUBB A,#08H
     MOV R1,A
     MOV A,@R1;RA
     MOV R3,A

     MOV A,R0
     SUBB A,#0CH
     MOV R1,A
     MOV A,R3
     XRL A,@R1 ;RE

     ANL A,#02H
     ADD A,B
     MOV B,A
     JMP CALCU_I2
CALCU1:
     MOV A,R0     ;TA
     ADD A,#06H
     MOV R1,A
     MOV A,@R1
     MOV R3,A

     MOV A,R0
     ADD A,#03H
     MOV R1,A
     MOV A,R3
     XRL A,@R1 ;TD
     ANL A,#02H

     ADD A,B
     MOV B,A
CALCU_I2:
     MOV A,@R0
     JB ACC.2,CALCU2;RA
     MOV A,R0
     SUBB A,#08H
     MOV R1,A
     MOV A,@R1
     MOV R3,A

     MOV A,R0
     SUBB A,#0CH
     MOV R1,A
     MOV A,R3
     XRL A,@R1
     ANL A,#04H
     ADD A,B
     MOV B,A
     JMP CALCU_I3
CALCU2:;TA
     MOV A,R0
     ADD A,#06H
     MOV R1,A
     MOV A,@R1;TD
     MOV R3,A

     MOV A,R0
     ADD A,#03H
     MOV R1,A
     MOV A,R3
     XRL A,@R1
     ANL A,#04H
     ADD A,B
     MOV B,A
CALCU_I3:
     MOV A,@R0
     JB ACC.3,CALCU3

     MOV A,R0
     SUBB A,#08H
     MOV R1,A;RA
     MOV A,@R1;RE
     MOV R3,A

     MOV A,R0
     SUBB A,#0CH
     MOV R1,A
     MOV A,R3
     XRL A,@R1
     ANL A,#08H
     ADD A,B
     MOV B,A
     JMP CALCU_OUTPUT
CALCU3:;TA
     MOV A,R0
     ADD A,#06H
     MOV R1,A
     MOV A,@R1;TD
     MOV R3,A

     MOV A,R0
     ADD A,#03H
     MOV R1,A
     MOV A,R3
     XRL A,@R1
     ANL A,#08H
     ADD A,B
     MOV B,A
CALCU_OUTPUT:;GPA_BYTE
     MOV A,R5
     ADD A,#0CH
     MOV R0,A ;
     MOV A,@R0
     ANL A,#0FH
     SWAP A
     ADD A,B
     MOV @R0,A
     RET


CRYPTO_DATA_REPEAT:
        LCALL CRYPTO_DATA
        LCALL OUTPUT_STAGE
        DJNZ R2,CRYPTO_DATA_REPEAT
        RET

DECRYPTO_DATA:  ;解密出Plaintext
DECRYPTO_DATA_REPEAT:;为再解密作准备
        MOV A,R5
        ADD A,#05H
        MOV R1,A
        MOV A,@R1
        MOV R7,A
        MOV A,R5
        ADD A,#06H
        MOV R1,A
        MOV A,@R1
        MOV R2,A  ;明文出口地址;4.1
        MOV A,R5
        ADD A,#07H
        MOV R1,A
        MOV A,@R1
        MOV R4,A  ;解密个数
DECRYPTO_DATA_REPEAT1:
        MOV A,R7  ;密文地址
        MOV R0,A
        MOV A,R5
        ADD A,#0CH
        MOV R1,A
        MOV A,@R1
        XRL A,@R0
        MOV R6,A

        MOV B,R2 ;4.1
        MOV R1,B
        MOV @R1,A
        MOV A,R5
        ADD A,#0BH
        MOV R0,A ;DATAIN
        MOV A,R6
        MOV @R0,A
        LCALL CRYPTO_DATA
        LCALL OUTPUT_STAGE
        MOV A,R5
        ADD A,#0BH
        MOV R0,A ;DATAIN
        MOV @R0,#00H
        LCALL CRYPTO_DATA
        LCALL OUTPUT_STAGE
        LCALL CRYPTO_DATA
        LCALL OUTPUT_STAGE
        LCALL CRYPTO_DATA
        LCALL OUTPUT_STAGE
        LCALL CRYPTO_DATA
        LCALL OUTPUT_STAGE
        LCALL CRYPTO_DATA
        LCALL OUTPUT_STAGE
        INC R7
        INC R2;4.1
        DJNZ R4,DECRYPTO_DATA_REPEAT1
        MOV A,R5
        ADD A,#05H
        MOV R1,A
        MOV A,R7
        MOV @R1,A;更新读出的密文地址
        RET

VERIFY_WRITE_PASSWORD:
        MOV A,R5
        ADD A,#28H ;28
        MOV R0,A
        MOV @R0,#07H

        INC R0   ;29
        MOV @R0,#0BAH

        MOV A,R5
        ADD A,#01H
        MOV R1,A
        MOV A,@R1
        ANL A,#0FH
        INC R0   ;2A
        MOV @R0,A
        INC R0   ;2B
        MOV @R0,#00H
        INC R0   ;2C
        MOV @R0,#03H

WRITE0:
        CJNE A,#00H,WRITE1
        MOV A,#00H
        MOV R4,A
        JMP SEND_READ_PASSWORD;通用部分调用
WRITE1: CJNE A,#01H,WRITE2
        MOV A,#06H
        MOV R4,A
        JMP SEND_READ_PASSWORD
WRITE2:CJNE A,#02H,WRITE3
        MOV A,#0CH
        MOV R4,A
        JMP SEND_READ_PASSWORD
WRITE3: CJNE A,#03H,WRITE4
        MOV A,#12H
        MOV R4,A
        JMP SEND_READ_PASSWORD
WRITE4: CJNE A,#04H,WRITE5
        MOV A,#18H
        MOV R4,A
        JMP SEND_READ_PASSWORD
WRITE5: CJNE A,#05H,WRITE6
        MOV A,#1EH
        MOV R4,A
        JMP SEND_READ_PASSWORD
WRITE6: CJNE A,#06H,WRITE7
        MOV A,#24H
        MOV R4,A
        JMP SEND_READ_PASSWORD
WRITE7: MOV A,#2AH
        MOV R4,A
        JMP SEND_READ_PASSWORD

VERIFY_READ_PASSWORD:
        MOV A,R5
        ADD A,#28H ;28
        MOV R0,A
        MOV @R0,#07H

        INC R0   ;29
        MOV @R0,#0BAH
        MOV A,R5
        ADD A,#01H
        MOV R1,A
        MOV A,@R1
        ANL A,#0FH
        ADD A,#10H
        INC R0   ;2A
        MOV @R0,A

        INC R0   ;2B
        MOV @R0,#00H

        INC R0   ;2C
        MOV @R0,#03H

        MOV DPTR,#PASSWORD_TABLE
READ0:  CJNE A,#10H,READ1
        MOV A,#03H
        MOV R4,A
        JMP SEND_READ_PASSWORD
READ1:  CJNE A,#11H,READ2
        MOV A,#09H
        MOV R4,A
        JMP SEND_READ_PASSWORD
READ2:  CJNE A,#12H,READ3
        MOV A,#0FH
        MOV R4,A
        JMP SEND_READ_PASSWORD
READ3:  CJNE A,#13H,READ4
        MOV A,#15H
        MOV R4,A
        JMP SEND_READ_PASSWORD
READ4:  CJNE A,#14H,READ5
        MOV A,#1BH
        MOV R4,A
        JMP SEND_READ_PASSWORD
READ5:  CJNE A,#15H,READ6
        MOV A,#21H
        MOV R4,A
        JMP SEND_READ_PASSWORD
READ6:  CJNE A,#16H,READ7
        MOV A,#27H
        MOV R4,A
        JMP SEND_READ_PASSWORD
READ7:  MOV A,#2DH
        MOV R4,A
        JMP SEND_READ_PASSWORD

SEND_READ_PASSWORD:
        MOV A,R5
        ADD A,#0BH
        MOV R0,A ;DATAIN
        MOV A,R4
        MOV DPTR,#PASSWORD_TABLE
        MOVC A,@A+DPTR
        MOV @R0,A
        MOV R2,#05H
        LCALL CRYPTO_DATA_REPEAT
        MOV A,R5
        ADD A,#0CH
        MOV R0,A
        MOV A,R5
        ADD A,#2DH
        MOV R1,A
        MOV A,@R0
        MOV @R1,A
        MOV A,R5
        ADD A,#0BH

⌨️ 快捷键说明

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