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

📄 adler32.cod

📁 microsoft visual c++ 2005、windows mobile 5 远程控制PC.通过阅读项目源码能让你熟悉Active Sync RAPI
💻 COD
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50727.762 

	TITLE	d:\src\VS2005\cpp\CeRemoteClient\zlib123\adler32.c
	.686P
	.XMM
	include listing.inc
	.model	flat

INCLUDELIB OLDNAMES

PUBLIC	_adler32@12
; Function compile flags: /Ogtpy
; File d:\src\vs2005\cpp\ceremoteclient\zlib123\adler32.c
;	COMDAT _adler32@12
_TEXT	SEGMENT
_adler$ = 8						; size = 4
_buf$ = 12						; size = 4
_len$ = 16						; size = 4
_adler32@12 PROC					; COMDAT

; 62   :     unsigned long sum2;
; 63   :     unsigned n;
; 64   : 
; 65   :     /* split Adler-32 into component sums */
; 66   :     sum2 = (adler >> 16) & 0xffff;

  00000	8b 4c 24 04	 mov	 ecx, DWORD PTR _adler$[esp-4]
  00004	53		 push	 ebx

; 67   :     adler &= 0xffff;
; 68   : 
; 69   :     /* in case user likes doing a byte at a time, keep it fast */
; 70   :     if (len == 1) {

  00005	8b 5c 24 10	 mov	 ebx, DWORD PTR _len$[esp]
  00009	57		 push	 edi
  0000a	8b f9		 mov	 edi, ecx
  0000c	c1 ef 10	 shr	 edi, 16			; 00000010H
  0000f	81 e1 ff ff 00
	00		 and	 ecx, 65535		; 0000ffffH
  00015	83 fb 01	 cmp	 ebx, 1
  00018	75 33		 jne	 SHORT $LN18@adler32

; 71   :         adler += buf[0];

  0001a	8b 44 24 10	 mov	 eax, DWORD PTR _buf$[esp+4]
  0001e	0f b6 10	 movzx	 edx, BYTE PTR [eax]
  00021	03 ca		 add	 ecx, edx

; 72   :         if (adler >= BASE)

  00023	81 f9 f1 ff 00
	00		 cmp	 ecx, 65521		; 0000fff1H
  00029	72 06		 jb	 SHORT $LN17@adler32

; 73   :             adler -= BASE;

  0002b	81 e9 f1 ff 00
	00		 sub	 ecx, 65521		; 0000fff1H
$LN17@adler32:

; 74   :         sum2 += adler;

  00031	03 f9		 add	 edi, ecx

; 75   :         if (sum2 >= BASE)

  00033	81 ff f1 ff 00
	00		 cmp	 edi, 65521		; 0000fff1H
  00039	72 06		 jb	 SHORT $LN16@adler32

; 76   :             sum2 -= BASE;

  0003b	81 ef f1 ff 00
	00		 sub	 edi, 65521		; 0000fff1H
$LN16@adler32:

; 77   :         return adler | (sum2 << 16);

  00041	8b c7		 mov	 eax, edi
  00043	c1 e0 10	 shl	 eax, 16			; 00000010H
  00046	5f		 pop	 edi
  00047	0b c1		 or	 eax, ecx
  00049	5b		 pop	 ebx

; 125  : }

  0004a	c2 0c 00	 ret	 12			; 0000000cH
$LN18@adler32:
  0004d	56		 push	 esi

; 78   :     }
; 79   : 
; 80   :     /* initial Adler-32 value (deferred check for len == 1 speed) */
; 81   :     if (buf == Z_NULL)

  0004e	8b 74 24 14	 mov	 esi, DWORD PTR _buf$[esp+8]
  00052	85 f6		 test	 esi, esi
  00054	75 09		 jne	 SHORT $LN15@adler32

; 82   :         return 1L;

  00056	8d 46 01	 lea	 eax, DWORD PTR [esi+1]
  00059	5e		 pop	 esi
  0005a	5f		 pop	 edi
  0005b	5b		 pop	 ebx

; 125  : }

  0005c	c2 0c 00	 ret	 12			; 0000000cH
$LN15@adler32:

; 83   : 
; 84   :     /* in case short lengths are provided, keep it somewhat fast */
; 85   :     if (len < 16) {

  0005f	83 fb 10	 cmp	 ebx, 16			; 00000010H
  00062	73 41		 jae	 SHORT $LN22@adler32

; 86   :         while (len--) {

  00064	85 db		 test	 ebx, ebx
  00066	74 11		 je	 SHORT $LN26@adler32
$LL13@adler32:

; 87   :             adler += *buf++;

  00068	0f b6 06	 movzx	 eax, BYTE PTR [esi]
  0006b	03 c8		 add	 ecx, eax
  0006d	83 eb 01	 sub	 ebx, 1
  00070	83 c6 01	 add	 esi, 1

; 88   :             sum2 += adler;

  00073	03 f9		 add	 edi, ecx
  00075	85 db		 test	 ebx, ebx
  00077	75 ef		 jne	 SHORT $LL13@adler32
$LN26@adler32:

; 89   :         }
; 90   :         if (adler >= BASE)

  00079	81 f9 f1 ff 00
	00		 cmp	 ecx, 65521		; 0000fff1H
  0007f	72 06		 jb	 SHORT $LN11@adler32

; 91   :             adler -= BASE;

  00081	81 e9 f1 ff 00
	00		 sub	 ecx, 65521		; 0000fff1H
$LN11@adler32:

; 92   :         MOD4(sum2);             /* only added so many BASE's */

  00087	b8 71 80 07 80	 mov	 eax, -2146992015	; 80078071H
  0008c	f7 e7		 mul	 edi
  0008e	c1 ea 0f	 shr	 edx, 15			; 0000000fH

; 93   :         return adler | (sum2 << 16);

  00091	8b c2		 mov	 eax, edx
  00093	c1 e0 04	 shl	 eax, 4
  00096	2b c2		 sub	 eax, edx
  00098	03 c7		 add	 eax, edi
  0009a	5e		 pop	 esi

; 121  :     }
; 122  : 
; 123  :     /* return recombined sums */
; 124  :     return adler | (sum2 << 16);

  0009b	c1 e0 10	 shl	 eax, 16			; 00000010H
  0009e	5f		 pop	 edi
  0009f	0b c1		 or	 eax, ecx
  000a1	5b		 pop	 ebx

; 125  : }

  000a2	c2 0c 00	 ret	 12			; 0000000cH
$LN22@adler32:

; 94   :     }
; 95   : 
; 96   :     /* do length NMAX blocks -- requires just one modulo operation */
; 97   :     while (len >= NMAX) {

  000a5	81 fb b0 15 00
	00		 cmp	 ebx, 5552		; 000015b0H
  000ab	0f 82 d8 00 00
	00		 jb	 $LN9@adler32
  000b1	b8 af a9 6e 5e	 mov	 eax, 1584310703		; 5e6ea9afH
  000b6	f7 e3		 mul	 ebx
  000b8	55		 push	 ebp
  000b9	8b ea		 mov	 ebp, edx
  000bb	c1 ed 0b	 shr	 ebp, 11			; 0000000bH
  000be	8b ff		 npad	 2
$LL10@adler32:

; 98   :         len -= NMAX;

  000c0	81 eb b0 15 00
	00		 sub	 ebx, 5552		; 000015b0H

; 99   :         n = NMAX / 16;          /* NMAX is divisible by 16 */

  000c6	b8 5b 01 00 00	 mov	 eax, 347		; 0000015bH
  000cb	eb 03 8d 49 00	 npad	 5
$LL8@adler32:

; 100  :         do {
; 101  :             DO16(buf);          /* 16 sums unrolled */

  000d0	0f b6 16	 movzx	 edx, BYTE PTR [esi]
  000d3	03 ca		 add	 ecx, edx
  000d5	0f b6 56 01	 movzx	 edx, BYTE PTR [esi+1]
  000d9	03 f9		 add	 edi, ecx
  000db	03 ca		 add	 ecx, edx
  000dd	0f b6 56 02	 movzx	 edx, BYTE PTR [esi+2]
  000e1	03 f9		 add	 edi, ecx
  000e3	03 ca		 add	 ecx, edx
  000e5	0f b6 56 03	 movzx	 edx, BYTE PTR [esi+3]
  000e9	03 f9		 add	 edi, ecx
  000eb	03 ca		 add	 ecx, edx
  000ed	0f b6 56 04	 movzx	 edx, BYTE PTR [esi+4]
  000f1	03 f9		 add	 edi, ecx
  000f3	03 ca		 add	 ecx, edx
  000f5	0f b6 56 05	 movzx	 edx, BYTE PTR [esi+5]
  000f9	03 f9		 add	 edi, ecx
  000fb	03 ca		 add	 ecx, edx
  000fd	0f b6 56 06	 movzx	 edx, BYTE PTR [esi+6]
  00101	03 f9		 add	 edi, ecx
  00103	03 ca		 add	 ecx, edx
  00105	0f b6 56 07	 movzx	 edx, BYTE PTR [esi+7]
  00109	03 f9		 add	 edi, ecx
  0010b	03 ca		 add	 ecx, edx
  0010d	0f b6 56 08	 movzx	 edx, BYTE PTR [esi+8]
  00111	03 f9		 add	 edi, ecx
  00113	03 ca		 add	 ecx, edx
  00115	0f b6 56 09	 movzx	 edx, BYTE PTR [esi+9]
  00119	03 f9		 add	 edi, ecx
  0011b	03 ca		 add	 ecx, edx
  0011d	0f b6 56 0a	 movzx	 edx, BYTE PTR [esi+10]
  00121	03 f9		 add	 edi, ecx
  00123	03 ca		 add	 ecx, edx
  00125	0f b6 56 0b	 movzx	 edx, BYTE PTR [esi+11]
  00129	03 f9		 add	 edi, ecx
  0012b	03 ca		 add	 ecx, edx
  0012d	0f b6 56 0c	 movzx	 edx, BYTE PTR [esi+12]
  00131	03 f9		 add	 edi, ecx
  00133	03 ca		 add	 ecx, edx
  00135	0f b6 56 0d	 movzx	 edx, BYTE PTR [esi+13]
  00139	03 f9		 add	 edi, ecx
  0013b	03 ca		 add	 ecx, edx
  0013d	0f b6 56 0e	 movzx	 edx, BYTE PTR [esi+14]
  00141	03 f9		 add	 edi, ecx
  00143	03 ca		 add	 ecx, edx
  00145	0f b6 56 0f	 movzx	 edx, BYTE PTR [esi+15]
  00149	03 f9		 add	 edi, ecx
  0014b	03 ca		 add	 ecx, edx
  0014d	03 f9		 add	 edi, ecx

; 102  :             buf += 16;

  0014f	83 c6 10	 add	 esi, 16			; 00000010H

; 103  :         } while (--n);

  00152	83 e8 01	 sub	 eax, 1
  00155	0f 85 75 ff ff
	ff		 jne	 $LL8@adler32

; 104  :         MOD(adler);

  0015b	b8 71 80 07 80	 mov	 eax, -2146992015	; 80078071H
  00160	f7 e1		 mul	 ecx
  00162	c1 ea 0f	 shr	 edx, 15			; 0000000fH
  00165	69 d2 0f 00 ff
	ff		 imul	 edx, -65521		; ffff000fH
  0016b	03 ca		 add	 ecx, edx

; 105  :         MOD(sum2);

  0016d	b8 71 80 07 80	 mov	 eax, -2146992015	; 80078071H
  00172	f7 e7		 mul	 edi
  00174	c1 ea 0f	 shr	 edx, 15			; 0000000fH
  00177	69 d2 0f 00 ff
	ff		 imul	 edx, -65521		; ffff000fH
  0017d	03 fa		 add	 edi, edx
  0017f	83 ed 01	 sub	 ebp, 1
  00182	0f 85 38 ff ff
	ff		 jne	 $LL10@adler32
  00188	5d		 pop	 ebp
$LN9@adler32:

; 106  :     }
; 107  : 
; 108  :     /* do remaining bytes (less than NMAX, still just one modulo) */
; 109  :     if (len) {                  /* avoid modulos if none remaining */

  00189	85 db		 test	 ebx, ebx
  0018b	0f 84 d6 00 00
	00		 je	 $LN5@adler32

; 110  :         while (len >= 16) {

  00191	83 fb 10	 cmp	 ebx, 16			; 00000010H
  00194	0f 82 94 00 00
	00		 jb	 $LN32@adler32
  0019a	8b c3		 mov	 eax, ebx
  0019c	c1 e8 04	 shr	 eax, 4
  0019f	90		 npad	 1
$LL4@adler32:

; 111  :             len -= 16;
; 112  :             DO16(buf);

  001a0	0f b6 16	 movzx	 edx, BYTE PTR [esi]
  001a3	03 ca		 add	 ecx, edx
  001a5	0f b6 56 01	 movzx	 edx, BYTE PTR [esi+1]
  001a9	03 f9		 add	 edi, ecx
  001ab	03 ca		 add	 ecx, edx
  001ad	0f b6 56 02	 movzx	 edx, BYTE PTR [esi+2]
  001b1	03 f9		 add	 edi, ecx
  001b3	03 ca		 add	 ecx, edx
  001b5	0f b6 56 03	 movzx	 edx, BYTE PTR [esi+3]
  001b9	03 f9		 add	 edi, ecx
  001bb	03 ca		 add	 ecx, edx
  001bd	0f b6 56 04	 movzx	 edx, BYTE PTR [esi+4]
  001c1	03 f9		 add	 edi, ecx
  001c3	03 ca		 add	 ecx, edx
  001c5	0f b6 56 05	 movzx	 edx, BYTE PTR [esi+5]
  001c9	03 f9		 add	 edi, ecx
  001cb	03 ca		 add	 ecx, edx
  001cd	0f b6 56 06	 movzx	 edx, BYTE PTR [esi+6]
  001d1	03 f9		 add	 edi, ecx
  001d3	03 ca		 add	 ecx, edx
  001d5	0f b6 56 07	 movzx	 edx, BYTE PTR [esi+7]
  001d9	03 f9		 add	 edi, ecx
  001db	03 ca		 add	 ecx, edx
  001dd	0f b6 56 08	 movzx	 edx, BYTE PTR [esi+8]
  001e1	03 f9		 add	 edi, ecx
  001e3	03 ca		 add	 ecx, edx
  001e5	0f b6 56 09	 movzx	 edx, BYTE PTR [esi+9]
  001e9	03 f9		 add	 edi, ecx
  001eb	03 ca		 add	 ecx, edx
  001ed	0f b6 56 0a	 movzx	 edx, BYTE PTR [esi+10]
  001f1	03 f9		 add	 edi, ecx
  001f3	03 ca		 add	 ecx, edx
  001f5	0f b6 56 0b	 movzx	 edx, BYTE PTR [esi+11]
  001f9	03 f9		 add	 edi, ecx
  001fb	03 ca		 add	 ecx, edx
  001fd	0f b6 56 0c	 movzx	 edx, BYTE PTR [esi+12]
  00201	03 f9		 add	 edi, ecx
  00203	03 ca		 add	 ecx, edx
  00205	0f b6 56 0d	 movzx	 edx, BYTE PTR [esi+13]
  00209	03 f9		 add	 edi, ecx
  0020b	03 ca		 add	 ecx, edx
  0020d	0f b6 56 0e	 movzx	 edx, BYTE PTR [esi+14]
  00211	03 f9		 add	 edi, ecx
  00213	03 ca		 add	 ecx, edx
  00215	0f b6 56 0f	 movzx	 edx, BYTE PTR [esi+15]
  00219	03 f9		 add	 edi, ecx
  0021b	03 ca		 add	 ecx, edx
  0021d	83 eb 10	 sub	 ebx, 16			; 00000010H
  00220	03 f9		 add	 edi, ecx

; 113  :             buf += 16;

  00222	83 c6 10	 add	 esi, 16			; 00000010H
  00225	83 e8 01	 sub	 eax, 1
  00228	0f 85 72 ff ff
	ff		 jne	 $LL4@adler32
$LN32@adler32:

; 114  :         }
; 115  :         while (len--) {

  0022e	85 db		 test	 ebx, ebx
  00230	74 11		 je	 SHORT $LN30@adler32
$LL2@adler32:

; 116  :             adler += *buf++;

  00232	0f b6 06	 movzx	 eax, BYTE PTR [esi]
  00235	03 c8		 add	 ecx, eax
  00237	83 eb 01	 sub	 ebx, 1
  0023a	83 c6 01	 add	 esi, 1

; 117  :             sum2 += adler;

  0023d	03 f9		 add	 edi, ecx
  0023f	85 db		 test	 ebx, ebx
  00241	75 ef		 jne	 SHORT $LL2@adler32
$LN30@adler32:

; 118  :         }
; 119  :         MOD(adler);

  00243	b8 71 80 07 80	 mov	 eax, -2146992015	; 80078071H
  00248	f7 e1		 mul	 ecx
  0024a	c1 ea 0f	 shr	 edx, 15			; 0000000fH
  0024d	69 d2 0f 00 ff
	ff		 imul	 edx, -65521		; ffff000fH
  00253	03 ca		 add	 ecx, edx

; 120  :         MOD(sum2);

  00255	b8 71 80 07 80	 mov	 eax, -2146992015	; 80078071H
  0025a	f7 e7		 mul	 edi
  0025c	c1 ea 0f	 shr	 edx, 15			; 0000000fH
  0025f	69 d2 0f 00 ff
	ff		 imul	 edx, -65521		; ffff000fH
  00265	03 fa		 add	 edi, edx
$LN5@adler32:

; 121  :     }
; 122  : 
; 123  :     /* return recombined sums */
; 124  :     return adler | (sum2 << 16);

  00267	8b c7		 mov	 eax, edi
  00269	5e		 pop	 esi
  0026a	c1 e0 10	 shl	 eax, 16			; 00000010H
  0026d	5f		 pop	 edi
  0026e	0b c1		 or	 eax, ecx
  00270	5b		 pop	 ebx

; 125  : }

  00271	c2 0c 00	 ret	 12			; 0000000cH
_adler32@12 ENDP
END

⌨️ 快捷键说明

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