;==============================================================|
:
; 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