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

📄 des.asm

📁 microchip网站上找的pic18F458单片机的示例代码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	permute rw3, 0, 3
	permute rw4, 7, 2
	permute rw4, 6, 1
	permute rw4, 5, 0
																     
	incf    fsr0, f                 ; The FSR now points to D5  
	permute rw4, 4, 7
	permute rw4, 3, 6
	permute rw4, 4, 5
	permute rw4, 3, 4
	permute rw4, 2, 3
	permute rw4, 1, 2
	permute rw4, 0, 1
	permute rw1, 7, 0
 
; xor trw1(i) with subkey(i+1), result placed in trw1(i)
; note that trw1=darray[0], ..., trw6=darray[5].

;        XOR48   k1, trw1

	movfp   indf1, wreg             ; Get subkey[i][0]
	xorwf   darray
	movfp   indf1, wreg             ; Get subkey[i][1]
	xorwf   darray+1
	movfp   indf1, wreg             ; Get subkey[i][2]
	xorwf   darray+2
	movfp   indf1, wreg             ; Get subkey[i][3]
	xorwf   darray+3
	movfp   indf1, wreg             ; Get subkey[i][4]
	xorwf   darray+4
	movfp   indf1, wreg             ; Get subkey[i][5]
	xorwf   darray+5

	nop                             ; DEBUG
	call    _Smatrix                ; Result back in trw(i)

	nop                             ; DEBUG
	call    _matrixP

	nop                             ; DEBUG
	movfp   lw1, wreg
	xorwf   rw1, f
	movfp   lw2, wreg
	xorwf   rw2, f
	movfp   lw3, wreg
	xorwf   rw3, f
	movfp   lw4, wreg
	xorwf   rw4, f

	return

;********************************************************
;* The input array is at trw(i), the output is stored   *
;* back in the trw(i).                                  *
;********************************************************

_Smatrix

;-- S1 --

	clrf    row, f                  ; Clear S_Matrix pointer

	btfsc   trw1, bit7
	bsf     row, bit1
	btfsc   trw1, bit2
	bsf     row, bit0

	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1                  ; row pointer

	btfsc   trw1, bit6
	bsf     row, bit3
	btfsc   trw1, bit5
	bsf     row, bit2
	btfsc   trw1, bit4
	bsf     row, bit1
	btfsc   trw1, bit3
	bsf     row, bit0

;-- Read the corresponding value from the table

	movlw   low Offset1
	addwf   row, w
	movpf   wreg, tblptrl           ; (tblptr) = Offset1
	movlw   high Offset1
	addwfc  zero, w
	movpf   wreg, tblptrh
	tablrd  0, 1, temp              ; (tblat) = Offet1 --> junk value
	tlrd    0, temp
	
;-- S2 --

	clrf    row, f                  ; Clear S_Matrix pointer

	btfsc   trw1, bit1
	bsf     row, bit1
	btfsc   trw2, bit4
	bsf     row, bit0

	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1                  ; row pointer

	btfsc   trw1, bit0
	bsf     row, bit3
	btfsc   trw2, bit7
	bsf     row, bit2
	btfsc   trw2, bit6
	bsf     row, bit1
	btfsc   trw2, bit5
	bsf     row, bit0

;-- Read the corresponding value from the table

	movfp   temp, wreg              ; Save previous result
	movwf   trw1

	movlw   low Offset2
	addwf   row, w
	movpf   wreg, tblptrl
	movlw   high Offset2
	addwfc  zero, w
	movpf   wreg, tblptrh
	tablrd  0, 1, temp
	tlrd    0, temp

;-- S3 --

	clrf    row, f                  ; Clear S_Matrix pointer

	btfsc   trw2, bit3
	bsf     row, bit1
	btfsc   trw3, bit6
	bsf     row, bit0

	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1                  ; row pointer

	btfsc   trw2, bit2
	bsf     row, bit3
	btfsc   trw2, bit1
	bsf     row, bit2
	btfsc   trw2, bit0
	bsf     row, bit1
	btfsc   trw3, bit7
	bsf     row, bit0

;-- Read the corresponding value from the table

	swapf   trw1, f
	movfp   temp, wreg              ; Save previous result
	addwf   trw1, f

	movlw   low Offset3
	addwf   row, w
	movpf   wreg, tblptrl
	movlw   high Offset3
	addwfc  zero, w
	movpf   wreg, tblptrh
	tablrd  0, 1, temp
	tlrd    0, temp

;-- S4 --

	clrf    row, f                  ; Clear S_Matrix pointer

	btfsc   trw3, bit5
	bsf     row, bit1
	btfsc   trw3, bit0
	bsf     row, bit0

	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1                  ; row pointer

	btfsc   trw3, bit4
	bsf     row, bit3
	btfsc   trw3, bit3
	bsf     row, bit2
	btfsc   trw3, bit2
	bsf     row, bit1
	btfsc   trw3, bit1
	bsf     row, bit0

;-- Read the corresponding value from the table

	movfp   temp, wreg              ; Save previous result
	movwf   trw2

	movlw   low Offset4
	addwf   row, w
	movpf   wreg, tblptrl
	movlw   high Offset4
	addwfc  zero, w
	movpf   wreg, tblptrh
	tablrd  0, 1, temp
	tlrd    0, temp

;-- S5 --

	clrf    row, f                  ; Clear S_Matrix pointer

	btfsc   trw4, bit7
	bsf     row, bit1
	btfsc   trw4, bit2
	bsf     row, bit0

	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1                  ; row pointer

	btfsc   trw4, bit6
	bsf     row, bit3
	btfsc   trw4, bit5
	bsf     row, bit2
	btfsc   trw4, bit4
	bsf     row, bit1
	btfsc   trw4, bit3
	bsf     row, bit0

;-- Read the corresponding value from the table

	swapf   trw2, f
	movfp   temp, wreg              ; Save previous result
	addwf   trw2, f

	movlw   low Offset5
	addwf   row, w
	movpf   wreg, tblptrl
	movlw   high Offset5
	addwfc  zero, w
	movpf   wreg, tblptrh
	tablrd  0, 1, temp
	tlrd    0, temp

;-- S6 --

	clrf    row, f                  ; Clear S_Matrix pointer

	btfsc   trw4, bit1
	bsf     row, bit1
	btfsc   trw5, bit4
	bsf     row, bit0

	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1                  ; row pointer

	btfsc   trw4, bit0
	bsf     row, bit3
	btfsc   trw5, bit7
	bsf     row, bit2
	btfsc   trw5, bit6
	bsf     row, bit1
	btfsc   trw5, bit5
	bsf     row, bit0

;-- Read the corresponding value from the table

	movfp   temp, wreg              ; Save previous result
	movwf   trw3

	movlw   low Offset6
	addwf   row, w
	movpf   wreg, tblptrl
	movlw   high Offset6
	addwfc  zero, w
	movpf   wreg, tblptrh
	tablrd  0, 1, temp
	tlrd    0, temp

;-- S7 --

	clrf    row, f                                  ; Clear S_Matrix pointer

	btfsc   trw5, bit3
	bsf     row, bit1
	btfsc   trw6, bit6
	bsf     row, bit0

	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1                  ; row pointer

	btfsc   trw5, bit2
	bsf     row, bit3
	btfsc   trw5, bit1
	bsf     row, bit2
	btfsc   trw5, bit0
	bsf     row, bit1
	btfsc   trw6, bit7
	bsf     row, bit0

;-- Read the corresponding value from the table

	swapf   trw3, f
	movfp   temp, wreg              ; Save previous result
	addwf   trw3, f

	movlw   low Offset7
	addwf   row, w
	movpf   wreg, tblptrl
	movlw   high Offset7
	addwfc  zero, w
	movpf   wreg, tblptrh
	tablrd  0, 1, temp
	tlrd    0, temp

;-- S8 --

	clrf    row, f                  ; Clear S_Matrix pointer

	btfsc   trw6, bit5
	bsf     row, bit1
	btfsc   trw6, bit0
	bsf     row, bit0

	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1
	rlncf   row, 1                  ; row pointer

	btfsc   trw6, bit4
	bsf     row, bit3
	btfsc   trw6, bit3
	bsf     row, bit2
	btfsc   trw6, bit2
	bsf     row, bit1
	btfsc   trw6, bit1
	bsf     row, bit0

;-- Read the corresponding value from the table

	movfp   temp, wreg              ; Save previous result
	movwf   trw4

	movlw   low Offset8
	addwf   row, w
	movpf   wreg, tblptrl
	movlw   high Offset8
	addwfc  zero, w
	movpf   wreg, tblptrh
	tablrd  0, 1, temp
	tlrd    0, temp

	swapf   trw4, f
	movfp   temp, wreg              ; Save previous result
	addwf   trw4, f

	return

;********************************************************
;* This routine performs the matrix P portion of the    *
;* function block of the DES.                           *
;*                                                      *
;*                                                      *
;* Generate 32 bits out of the 32 using the matrix P    *
;* shown below.                                         *
;*                                                      *
;*                 Matrix P                             *
;*                                                      *
;*                16  7 20 21                           *
;*                29 12 28 17                           *
;*                 1 15 23 26                           *
;*                 5 18 31 10                           *
;*                 2  8 24 14                           *
;*                32 27  3  9                           *
;*                19 13 30  6                           *
;*                22 11  4 25                           *
;*                                                      *
;********************************************************
_matrixP
	movlw   rw1
	movpf   wreg, blkPtr            ; Prepare for indirect addressing

	movlw   0xcf                    ; Do not change fsr1 status
	andwf   alusta, f
	bsf     _fs0
	movfp   blkPtr, wreg            ; Load destination address
	movwf   fsr0
	clrf    indf0                   ; Clear the destination block D0
	clrf    indf0                   ; Clear the destination block D1
	clrf    indf0                   ; Clear the destination block D2
	clrf    indf0                   ; Clear the destination block D3
	movfp   blkPtr, wreg            ; Reload destination address
	movwf   fsr0
	bsf     _fs1                    ; Turn off FSR0 auto increment

	permute trw2, 0, 7              ; The FSR now points to D0
	permute trw1, 1, 6
	permute trw3, 4, 5
	permute trw3, 3, 4
	permute trw4, 3, 3
	permute trw2, 4, 2
	permute trw4, 4, 1
	permute trw3, 7, 0

	incf    fsr0, f                 ; The FSR notrw points to D1
	permute trw1, 7, 7
	permute trw2, 1, 6
	permute trw3, 1, 5
	permute trw4, 6, 4
	permute trw1, 3, 3
	permute trw3, 6, 2
	permute trw4, 1, 1
	permute trw2, 6, 0

	incf    fsr0, f                 ; The FSR now points to D2
	permute trw1, 6, 7
	permute trw1, 0, 6
	permute trw3, 0, 5
	permute trw2, 2, 4
	permute trw4, 0, 3
	permute trw4, 5, 2
	permute trw1, 5, 1
	permute trw2, 7, 0

	incf    fsr0, f                 ; The FSR now points to D3

⌨️ 快捷键说明

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