__asm{
mov esi,pack //pointer for pack body
mov edi,unpack //pointer for unpack body
cld
mov dl,0x80
loop99: mov al,byte ptr ds:[esi]
inc esi
mov byte ptr ds:[edi],al
inc edi
loop111:add dl,dl
jne loop1
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop1: jae loop99
add dl,dl
jne loop2
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop2: jae loop3
xor eax,eax
add dl,dl
jne loop4
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop4: jae loop5
add dl,dl
jne loop6
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop6: adc eax,eax
add dl,dl
jne loop7
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop7: adc eax,eax
add dl,dl
jne loop8
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop8: adc eax,eax
add dl,dl
jne loop10
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop10: adc eax,eax
je loop11
push edi
sub edi,eax
mov al,byte ptr ds:[edi]
pop edi
loop11: mov byte ptr ds:[edi],al
inc edi
jmp loop111
loop3: mov eax,1
loop23: add dl,dl
jne loop25
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop25: adc eax,eax
add dl,dl
jne loop24
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop24: jb loop23
sub eax,2
jne loop22
mov ecx,1
loop19: add dl,dl
jne loop21
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop21: adc ecx,ecx
add dl,dl
jne loop20
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop20: jb loop19
push esi
mov esi,edi
sub esi,ebp
rep movsb
pop esi
jmp loop111
loop22: dec eax
shl eax,8
mov al,byte ptr ds:[esi]
inc esi
mov ebp,eax
mov ecx,1
loop15: add dl,dl
jne loop16
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop16: adc ecx,ecx
add dl,dl
jne loop17
mov dl,byte ptr ds:[esi]
inc esi
adc dl,dl
loop17: jb loop15
cmp eax,0x7D00
jae loop18
cmp eax,0x500
jb loop12
inc ecx
push esi
mov esi,edi
sub esi,eax
rep movsb
pop esi
jmp loop111
loop12: cmp eax,0x7F
ja loop13
loop18: add ecx,2
loop13: push esi
mov esi,edi
sub esi,eax
rep movsb
pop esi
jmp loop111
loop5: mov al,byte ptr ds:[esi]
inc esi
xor ecx,ecx
shr al,1
je loop14
adc ecx,2
mov ebp,eax
push esi
mov esi,edi
sub esi,eax
rep movsb
loop1001: pop esi
jmp loop111
loop14: sub edi,dword ptr ss:[esp+28]
mov dword ptr ss:[esp+0x1C],edi
};