;==============================================================|
:
; Converts a Dec, Hex, Oct or Bin ascii string to a 32 bit num |
:
; INVOKE AsciiBase, addr Conv, addr w1, 10 |
:
;==============================================================|
;from yooper at kalamazoo.net via Iczelion's Win32 Assembly Forum
AsciiBase PROC Input:DWORD, Output:DWORD, Base: DWORD
pushad
mov esi, Input
mov edi, Output
mov dword ptr[edi], 0
INVOKE lstrlen, Input
xor ecx, ecx
.while (eax)
.if byte ptr[esi+ecx] > 60h
sub byte ptr[esi+ecx], 57h
.elseif byte ptr[esi+ecx] > 40h
sub byte ptr[esi+ecx], 37h
.else
xor byte ptr[esi+ecx], 30h
.endif
dec eax
inc ecx
.endw
mov ebx, 1
mov esi, Input
add esi, ecx
dec esi
xor edx, edx
.while (ecx)
mov al, byte ptr[esi] ; Extract byte for conv.
and eax, 000000ffh
imul eax, ebx
add dword ptr[edi], eax ; Accumulate output
imul ebx, Base
dec esi
dec ecx
.endw
popad
RET
AsciiBase ENDP