Тема: Ancord
Показать сообщение отдельно

  #4  
Старый 04.05.2011, 01:00
Ancord
Участник форума
Регистрация: 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
 
Ответить с цитированием