📄 adler32.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 + -