
04.05.2011, 01:00
|
|
Участник форума
Регистрация: 12.08.2010
Сообщений: 274
С нами:
8289686
Репутация:
89
|
|
strtodword.inc:
code:
proc GetZSLength
push ecx
push esi
cld
xor al, al
mov ecx, 0FFFFFFFFh
mov esi, edi
repne scasb
sub edi, esi
mov eax, edi
dec eax
pop esi
pop ecx
ret
endp
proc STR_to_DWORD strc
mov esi,[strc]
mov eax,10
push esi
push ebx
push edi
push edx
push ecx
cmp eax, 16
ja .error
cmp eax, 2
jb .error
mov ecx, eax
mov edi, esi
call GetZSLength
mov edi, eax
add edi, esi ; edi point to end ZS
xor eax, eax
xor edx, edx
inc edx
.rep:
dec edi
xor ebx, ebx
mov bl, [edi]
cmp bl, 30h
jb .error
cmp bl, 39h
jna .digit
cmp bl, 41h
jb .error
@@:
cmp bl, 46h
jna .sim_upcase
cmp bl, 61h
jb .error
@@:
cmp bl, 66h
jna .sim_lowcase
ja .error
.digit:
sub bl, 30h
jmp @f
.sim_upcase:
sub bl, 37h
jmp @f
.sim_lowcase:
sub bl, 57h
@@:
cmp bl, cl
ja .error
imul ebx, edx
add eax, ebx
imul edx, ecx
cmp edi, esi
jnz .rep
.endrep:
jmp @f
.error:
xor eax, eax
@@:
pop ecx
pop edx
pop edi
pop ebx
pop esi
ret
endp
|
|
|