答复
看看谁能把下面的内嵌汇编转成C语言的:
代码:
int Test_Encode(PBYTE psrc, int srclen, PBYTE buf)
{
BYTE _cache;
DWORD Low_l;
DWORD Low_h;
DWORD uiSom;
int i;
int j;
BYTE b;
__asm
{
xor edi, edi
xor edx, edx
xor esi, esi
mov ebx, 400h
mov Low_l, edx
mov Low_h, edx
mov uiSom, 0FFFFFFFFh
mov _cache, dl
mov i, edx
cmp srclen, 0
jle loc_01
loc_12:
mov eax, psrc
mov ecx, i
mov j, 0
mov dl, [ecx+eax]
mov b, dl
loc_11:
mov al, b
mov cl, byte ptr j
mov edx, uiSom
shr al, cl
shr edx, 0Bh
imul edx, ebx
test al, 1
jnz loc_02
mov ecx, 800h
mov uiSom, edx
sub ecx, ebx
shr ecx, 5
add ebx, ecx
jmp loc_03
loc_02:
add Low_l, edx
adc Low_h, 0
sub uiSom, edx
mov edx, ebx
shr edx, 5
sub ebx, edx
loc_03:
cmp uiSom, 1000000h
jnb loc_04
shl uiSom, 8
cmp Low_l, 0FF000000h
jb loc_05
cmp Low_h, 0
jz loc_06
loc_05:
mov cl, _cache
test esi, esi
jz loc_07
mov al, byte ptr Low_h
loc_08:
mov dl, al
add dl, cl
mov ecx, buf
mov [edi+ecx], dl
inc edi
or cl, 0FFh
dec esi
jnz loc_08
loc_07:
mov eax, Low_l
shr eax, 18h
mov _cache, al
jmp loc_09
loc_06:
mov al, _cache
loc_09:
shl Low_l, 8
mov Low_h, 0
inc esi
jmp loc_10
loc_04:
mov al, _cache
loc_10:
inc j
cmp j, 8
jl loc_11
mov edx, srclen
inc i
cmp i, edx
jl loc_12
loc_01:
mov srclen, 5
loc_17:
mov edx, Low_l
cmp edx, 0FF000000h
jb loc_13
cmp Low_h, 0
jz loc_14
loc_13:
test esi, esi
jz loc_15
mov cl, byte ptr Low_h
loc_16:
mov bl, cl
add bl, al
mov eax, buf
mov [edi+eax], bl
inc edi
or al, 0FFh
dec esi
jnz loc_16
loc_15:
mov eax, edx
shr eax, 18h
loc_14:
inc esi
shl edx, 8
mov Low_l, edx
mov Low_h, 0
dec srclen
jnz loc_17
mov i, edi
}
return i;
}
