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

📄 crc.s

📁 一款交换机BSP开发代码
💻 S
字号:

	SECTION .bss
;#define CRC32_POLY 0x04c11db7     /* AUTODIN II, Ethernet, & FDDI */ 
 	_CRC32_PLOY   equ  0x04c11db7

;u_long crc32_table[256]; 
	.type	_CRC32_TABLE,@object
	.size	_CRC32_TABLE,4
    XDEF    _CRC32_TABLE
_CRC32_TABLE     DS.B    1024

	SECTION .text
;/*************************************************************************/
;/*                                                                       */
;/* FUNCTION                                                              */
;/*                                                                       */
;/*      init_crc32                                                       */
;/*                                                                       */
;/* DESCRIPTION                                                           */
;/*                                                                       */
;/*      This function builds auxiliary table for parallel                */
;/*      byte-at-a-time CRC-32.                                           */
;/*                                                                       */
;/* AUTHOR                                                                */
;/*                                                                       */
;/*      Xiaohuan Zhang, Start Network Technology CO., LTD.               */
;/*                                                                       */
;/* CALLED BY                                                             */
;/*                                                                       */
;/*      INT_Initialize                    Initialize system              */
;/*                                                                       */
;/* CALLS                                                                 */
;/*                                                                       */
;/*      None                                                             */
;/*                                                                       */
;/* INPUTS                                                                */
;/*                                                                       */
;/*      None                                                             */
;/*                                                                       */
;/* OUTPUTS                                                               */
;/*                                                                       */
;/*      available values of CRC32_TABLE                                  */
;/*                                                                       */
;/* HISTORY                                                               */
;/*                                                                       */
;/*         NAME            DATE                    REMARKS               */
;/*                                                                       */
;/*      X. Zhang        10-09-2000      Created and verified version 1.0 */
;/*                                                                       */
;/*************************************************************************/
	ALIGN	4
	XDEF	_init_crc32
_init_crc32:
; void init_crc32(void) 
; { 
	MOVE.L	D7,-(A7)		; D7 = c
	MOVE.L	#_CRC32_TABLE,A0
	MOVE.L	D6,-(A7)		; D6 = i
;         int i, j; 
;         u_long c;
;  
;         for (i = 0; i < 256; ++i) { 
	MOVEQ	#0,D6
	MOVE.L	#256,D0
_init_crc32_loop:
;                 for (c = i << 24, j = 8; j > 0; --j) 
	MOVE.L	D6,D7
	MOVEQ	#24,D1
	LSL.L	D1,D7				;c = i << 24
	MOVEQ	#8,D1
_init_crc32_subloop:
;                         c = (c & 0x80000000) ? (c << 1) ^ CRC32_POLY : (c << 1); 
	TST.L	D7
	JPL		_init_crc32_plus	; test c&0x80000000
	ADD.L	D7,D7				; c << 1
	EOR.L	#_CRC32_PLOY,D7		; ^CRC32_PLOY
	JRA		_init_crc32_subloop_end
_init_crc32_plus:
	ADD.L	D7,D7				; c << 1
_init_crc32_subloop_end:
	SUBQ.L	#1,D1				; --j
	JNE		_init_crc32_subloop
;                 crc32_table[i] = c; 
	MOVE.L	D7,(A0)+			; crc32_table[i] = c
	ADDQ.L	#1,D6				; ++i
	CMP.L	D0,D6
	JLT		_init_crc32_loop
;         } 
; } 
	MOVE.L	(A7)+,D6
	MOVE.L	(A7)+,D7
	RTS

;/*************************************************************************/
;/*                                                                       */
;/* FUNCTION                                                              */
;/*                                                                       */
;/*      crc32                                                            */
;/*                                                                       */
;/* DESCRIPTION                                                           */
;/*                                                                       */
;/*      This function Calculates string's CRC32 .                        */
;/*                                                                       */
;/* AUTHOR                                                                */
;/*                                                                       */
;/*      Xiaohuan Zhang, Start Network Technology CO., LTD.               */
;/*                                                                       */
;/* CALLED BY                                                             */
;/*                                                                       */
;/*      INT_Initialize                    Initialize system              */
;/*                                                                       */
;/* CALLS                                                                 */
;/*                                                                       */
;/*      None                                                             */
;/*                                                                       */
;/* INPUTS                                                                */
;/*                                                                       */
;/*      buf                               String                         */
;/*      len                               String's length                */
;/*                                                                       */
;/* OUTPUTS                                                               */
;/*                                                                       */
;/*      CRC32 of string                                                  */
;/*                                                                       */
;/* HISTORY                                                               */
;/*                                                                       */
;/*         NAME            DATE                    REMARKS               */
;/*                                                                       */
;/*      X. Zhang        10-09-2000      Created and verified version 1.0 */
;/*                                                                       */
;/*************************************************************************/
	ALIGN	4
	XDEF	_crc32
_crc32:
; u_long crc32(u_char *buf, int len) 
; { 
	LEA	-12(A7),A7
	MOVEM.L	D6/D7/A5,(A7)
	MOVE.L	16(A7),A1			; A1 = buf
	MOVE.L	20(A7),D6			; D6 = len
	MOVE.L	#_CRC32_TABLE,A5
;         u_char *p; 
;         u_long  crc; 
;  
;         crc = 0xffffffff;       /* preload shift register, per CRC-32 spec */ 
	MOVEQ	#-1,D7
;         for (p = buf; len > 0; ++p, --len) 
	TST.L	D6
	JLE		_crc32_end
_crc32_loop:
;                 crc = (crc << 8) ^ crc32_table[(crc >> 24) ^ *p]; 
	MOVE.L	D7,D1
	MOVEQ	#24,D0
	LSR.L	D0,D1
	MOVEQ	#0,D0
	MOVE.B	(A1)+,D0
	EOR.L	D0,D1
	MOVE.L	(A5,D1*4),D1
	MOVE.L	D7,D0
	LSL.L	#8,D0
	EOR.L	D1,D0
	MOVE.L	D0,D7
	SUBQ.L	#1,D6
	JNE		_crc32_loop
_crc32_end:
;         return crc;            /* transmit complement, per CRC-32 spec */ 
	MOVE.L	D7,D0
; } 
	MOVEM.L	(A7),D6/D7/A5
	LEA	12(A7),A7
	RTS

⌨️ 快捷键说明

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