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

📄 des.a51

📁 利用8051汇编语言编写的DES算法程序
💻 A51
📖 第 1 页 / 共 2 页
字号:
;-------------------------------------------------------------------------------
	ANL	(BUF+5),#11000000B		;*********
	ORL	(BUF+5),A
;-------------------------------------------------------------------------------		
        CLR	A
	MOV C, (BITS_1+5).4
	RLC	A
	MOV C, (BITS_1+6).7
	RLC	A
	MOV C, (BITS_1+4).1
	RLC	A
	MOV C, (BITS_1+6).0
	RLC	A
	MOV C, (BITS_1+4).6
	RLC	A
	MOV C, (BITS_1+6).3
	RLC	A
;-------------------------------------------------------------------------------
 	ANL	(BUF+6),#1100$0000B		;*********
	ORL	(BUF+6),A		;*************
;-------------------------------------------------------------------------------		
        CLR	A
	MOV C, (BITS_1+5).2
	RLC	A
	MOV C, (BITS_1+5).6
	RLC	A
	MOV C, (BITS_1+6).6
	RLC	A
	MOV C, (BITS_1+4).4
	RLC	A
	MOV C, (BITS_1+3).3
	RLC	A
	MOV C, (BITS_1+3).0
	RLC	A
	MOV C, ACC.0			;????????????????????????????????
;-------------------------------------------------------------------------------
  	ANL	(BUF+7),#11000000B		;*********
	ORL	(BUF+7),A
;-------------------------------------------------------------------------------		

;======================================================
	MOV DPTR, #S1BOX
    	JNB B_DES,S_1
        JMP S_2
;s_1==========================================================
S_1:
	; Step 2.3: The S box transform: hard-coded
	; The results are in (BUF) - (BUF+3)
	;	// S-Box No.1========================================

	MOV A, BLOCK+7
	RRC A
	MOV A, BLOCK+4
	LCALL	S_BOX1


	;	// S-Box No.2========================================
	MOV A, BLOCK+5
	RLC A
	MOV A, BLOCK+4
	LCALL	S_BOX2

	;	// S-Box No.3========================================
	MOV A, BLOCK+4
	RRC A
	MOV A, BLOCK+5
	LCALL	S_BOX3

	;	// S-Box No.4=========================================
	MOV A, BLOCK+6
	RLC A
	MOV A, BLOCK+5
	LCALL	S_BOX4


	;	// S-Box No.5==========================================
	MOV A, BLOCK+5
	RRC A
	MOV A, BLOCK+6
	LCALL	S_BOX5


	;	// S-Box No.6==================================================
	MOV A, BLOCK+7
	RLC A
	MOV A, BLOCK+6
	LCALL	S_BOX6

	;	// S-Box No.7===========================================
	MOV A, BLOCK+6
	RRC A
	MOV A, BLOCK+7
	LCALL	S_BOX7

	;	// S-Box No.8===========================================
	MOV A, BLOCK+4
	RLC A
	MOV A, BLOCK+7

	JMP	S_BOX80
;s 2=============================================================
s_2:
	; Step 2.3B: The S box transform: hard-coded
	; The results are in (BUF) - (BUF+3)
	;	// S-Box No.1===============================================================

	MOV A, BLOCK+3
	RRC A
	MOV A, BLOCK
	LCALL	S_BOX1

	;	// S-Box No.2=============================================================
	MOV A, BLOCK+1
	RLC A
	MOV A, BLOCK
	LCALL	S_BOX2

	;	// S-Box No.3=============================================================
	MOV A, BLOCK
	RRC A
	MOV A, BLOCK+1
	LCALL	S_BOX3

	;	// S-Box No.4=================================================================
	MOV A, BLOCK+2
	RLC A
	MOV A, BLOCK+1
	LCALL	S_BOX4

	;	// S-Box No.5=========================================================
	MOV A, BLOCK+1
	RRC A
	MOV A, BLOCK+2
	LCALL	S_BOX5

	;	// S-Box No.6=======================================================
	MOV A, BLOCK+3
	RLC A
	MOV A, BLOCK+2
	LCALL	S_BOX6

	;	// S-Box No.7======================================================
	MOV A, BLOCK+2
	RRC A
	MOV A, BLOCK+3
	LCALL	S_BOX7

	;	// S-Box No.8========================================================
	MOV A, BLOCK
	RLC A
	MOV A, BLOCK+3
S_BOX80:
	RLC A
	XRL A, BUF+7
   	SETB ACC.6
    	CLR ACC.7
	MOVC A, @A+DPTR
    	ANL A,#0FH
	ORL BUF+3, A
;=============================================================
s_over:
	; Step 2.4: The P-pemutation of the output from S-box
	; From (BUF)   - (BUF+3)
	; To   (BUF+4) - (BUF+7)
	
	MOV C, (BUF+1).0
	RLC	A
	MOV C, (BUF+0).1
	RLC	A
	MOV C, (BUF+2).4
	RLC	A
	MOV C, (BUF+2).3
	RLC	A
	MOV C, (BUF+3).3
	RLC	A
	MOV C, (BUF+1).4
	RLC	A
	MOV C, (BUF+3).4
	RLC	A	
	MOV C, (BUF+2).7
	RLC	A
	MOV	(BUF+4),A		;*******************


	MOV C, (BUF+0).7
	RLC	A
	MOV C, (BUF+1).1
	RLC	A
	MOV C, (BUF+2).1
	RLC	A
	MOV C, (BUF+3).6
	RLC	A
	MOV C, (BUF+0).3
	RLC	A
	MOV C, (BUF+2).6
	RLC	A
	MOV C, (BUF+3).1
	RLC	A
	MOV C, (BUF+1).6
	RLC	A
	MOV	(BUF+5),A	;*******************


	MOV C, (BUF+0).6
	RLC	A
	MOV C, (BUF+0).0
	RLC	A
	MOV C, (BUF+2).0
	RLC	A
	MOV C, (BUF+1).2
	RLC	A
	MOV C, (BUF+3).0
	RLC	A;		
	MOV C, (BUF+3).5
	RLC	A;
	MOV C, (BUF+0).5
	RLC	A
	MOV C, (BUF+1).7
	RLC	A
	MOV	(BUF+6),A	;****************


	MOV C, (BUF+2).5
	RLC	A;
	MOV C, (BUF+1).3
	RLC	A
	MOV C, (BUF+3).2
	RLC	A
	MOV C, (BUF+0).2
	RLC	A;	
	MOV C, (BUF+2).2
	RLC	A
	MOV C, (BUF+1).5
	RLC	A
	MOV C, (BUF+0).4
	RLC	A
	MOV C, (BUF+3).7
	RLC	A
	MOV	(BUF+7),A	;*********************
   	JB  B_DES, LH_DES_2
;===========================================================
;***********************************************************
;===========================================================

	; Step 2.5: XOR the output of the S-box back to the block
	; Note: here we do NOT follow the classical left <-> right
	; exchange. Rather we reverse their reference in the second part
	MOV A, BUF+4
	XRL BLOCK, A
	MOV A, BUF+5
	XRL BLOCK+1, A
	MOV A, BUF+6
	XRL BLOCK+2, A
	MOV A, BUF+7
	XRL BLOCK+3, A

			; The second part of the un-rolled loop
	DEC R1				; R1 acts as the reference to shift counts
			; Step 2.1B: Rotate the key vector

;===========================================================
;2== ***********************************************************
;===========================================================
    SETB  	 B_DES
    JMP    	LH_DES_1

;===========================================================
;***********************************************************
 LH_DES_2:
;===========================================================
			; Step 2.5: XOR the output of the S-box back to the block
			; Note: here we do NOT follow the classical left <-> right
			; exchange. Rather we reverse their reference in the second part
	MOV A, BUF+4
	XRL BLOCK+4, A
	MOV A, BUF+5
	XRL BLOCK+5, A
	MOV A, BUF+6
	XRL BLOCK+6, A
	MOV A, BUF+7
	XRL BLOCK+7, A

				; Step 2.6: Done in this round and we loop again
	DJNZ R1, NEXT_1
	SJMP STEP_3			; End of the 8 loops
NEXT_1: LJMP LOOP_1			; Next loop

				; Step 3: Final permutation of the block (FP)
STEP_3:
	MOV A, R5
	JB ACC.1, FPERM
	JMP DONE
FPERM:
				; Step 3.1:
;****************************************
	
	MOV	R0,#BLOCK
	MOV	R1,#BLOCK+2
	LCALL	STEP31
	
	MOV	R0,#BLOCK+4
	MOV	R1,#BLOCK+6
	LCALL	STEP31
;******************************************

	MOV	R7,#04H
	MOV	R0,#BLOCK
	MOV	R1,#BLOCK+1
STEP3:	
	MOV	A,@R0
	RL	A
	RL	A
	MOV	@R0,A
	XRL	A,@R1
	ANL	A,#0CCH
	XCH	A,@R1
	XRL	A,@R1
	XCH	A,@R1
	XRL	A,@R0
	RR	A
	RR	A
	MOV	@R0,A

	INC	R0
	INC	R1
	INC	R0
	INC	R1
	DJNZ	R7,STEP3
;**********************************************

				; Step 3.3:

	MOV	R7,#04H
	MOV	R0,#BLOCK
	MOV	R1,#BLOCK+4
STEP33:	
	MOV	A,@R0
	RL	A
	MOV	@R0,A
	XRL	A,@R1
	ANL	A,#0AAH
	XCH	A,@R1
	XRL	A,@R1
	XCH	A,@R1
	XRL	A,@R0
	RR	A
	MOV	@R0,A

	INC	R0
	INC	R1
	DJNZ	R7,STEP33
;**********************************************

				; Step 3.4:
	MOV 	A, BLOCK

	XCH     A,BLOCK+7
	XCH	A,BLOCK


	MOV	A,BLOCK+4
	XCH	A,BLOCK+6
	XCH	A,BLOCK+2
	XCH	A,BLOCK+3
	XCH	A,BLOCK+1
	XCH	A,BLOCK+5
        MOV	BLOCK+4,A

				; Step 3.5: Done
;*****************************************************************
DONE:
		; Done: Now we are done, the encrypted data is in BLOCK
	 RET
;*********************************************
STEP31:
	MOV	R7,#02
STEP310:	
	MOV	A,@R0
	SWAP	A
	MOV	@R0,A
	XRL	A,@R1
	ANL	A,#0F0H
 	XCH	A,@R1
	XRL	A,@R1
	XCH	A,@R1
	XRL	A,@R0
	SWAP	A
	MOV	@R0,A

	INC	R0
	INC	R1
	DJNZ	R7,STEP310
	RET

STEP12:	
	MOV	R7,#02
STEP120:
	MOV	A,@R0
	RL	A
	RL	A
	MOV	@R0,A
	XRL	A,@R1
	ANL	A,#0CCH
	XCH	A,@R1
	XRL	A,@R1
	XCH	A,@R1
	XRL	A,@R0
	RR	A
	RR	A
	MOV	@R0,A
	
	INC	R0
	INC	R1
	DJNZ	R7,STEP120
	RET
;**********************************************
S_BOX1:	

 	RRC A
 	RR A
 	RR A
	XRL A, BUF
	ANL A, #3FH 
	MOVC A, @A+DPTR
   	ANL  A,#0F0H
	MOV BUF, A
	RET
S_BOX2:
	RLC A
	XRL A, BUF+1
	ANL A, #3FH
	MOVC A, @A+DPTR
    	ANL  A,#0FH
	ORL BUF, A
	RET
S_BOX3:
	RRC A
	RR A
	RR A
	XRL A, BUF+2
    	CLR ACC.7
    	SETB ACC.6
	MOVC A, @A+DPTR
    	ANL A,#0F0H
	MOV BUF+1, A
	RET
S_BOX4:
	RLC A
	XRL A, BUF+3
    	CLR  ACC.7
    	SETB ACC.6
	MOVC A, @A+DPTR
    	ANL A,#0FH
	ORL BUF+1, A
	RET
S_BOX5:
	RRC A
	RR A
	RR A
	XRL A, BUF+4
	MOV DPTR, #S5BOX
	ANL A, #3FH 
	MOVC A, @A+DPTR
    	ANL A,#0F0H
	MOV BUF+2, A
	RET
S_BOX6:	
	RLC A
	XRL A, BUF+5
	ANL A, #3FH 
	MOVC A, @A+DPTR
    	ANL A,#0FH
	ORL BUF+2, A
	RET
S_BOX7:
	RRC A
	RR A
	RR A
	XRL A, BUF+6
	CLR ACC.7
    	SETB ACC.6
	MOVC A, @A+DPTR
    	ANL A,#0F0H
	MOV BUF+3, A
	RET
;********************************************

$ENDIF ; __PHILIPS != 2

		END

⌨️ 快捷键说明

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