home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / awk / awk320sr.zip / AWKATOL.ASM < prev    next >
Assembly Source File  |  1991-04-25  |  2KB  |  80 lines

  1. ; string to long integer conversion
  2. ;
  3. ;  Copyright (C) 1988, 1989, 1990, 1991 by Rob Duff
  4. ;  All rights reserved
  5. ;
  6. ;long fatol(char far * str);
  7. ;
  8. _TEXT   SEGMENT BYTE PUBLIC 'CODE'
  9.         ASSUME  CS:_TEXT
  10.  
  11.         PUBLIC  _fatol
  12. _fatol  PROC    NEAR
  13.         push    bp
  14.         mov     bp,sp
  15.         push    si
  16.         push    di
  17.         push    ds
  18.         xor     bx,bx
  19.         xor     di,di
  20.         xor     cx,cx
  21.  
  22.         lds     si, [bp+4]              ; string pointer
  23.         mov     bp,10                   ; constant BASE
  24.  
  25.         lodsb
  26.         cmp     al,'+'
  27.         je      fatal
  28.         cmp     al,'-'                  ; check sign
  29.         jne     check
  30.         mov     cl,al                   ; set sign
  31. fatal:
  32.         lodsb
  33. check:
  34.         mov     ch,al                   ; next character
  35.         sub     ch,'0'
  36.         jb      final
  37.         cmp     ch,10
  38.         jb      digit
  39.         sub     ch,'A'-'0'              ; uppercase
  40.         jb      final
  41.         cmp     ch,6
  42.         jb      hex
  43.         sub     ch,'a'-'A'              ; uppercase
  44.         jb      final
  45.         cmp     ch,6
  46.         jnb     final
  47. hex:
  48.         add     ch,10
  49. digit:
  50.         mov     ax,di
  51.         mul     bp
  52.         mov     di, ax
  53.         mov     ax,bx
  54.         mul     bp
  55.         mov     bx,ax
  56.         add     bl,ch
  57.         adc     bh,0
  58.         adc     di,dx
  59.         jmp     fatal
  60. final:
  61.         test    cl,cl
  62.         jz      finish
  63.         neg     di
  64.         neg     bx
  65.         adc     di,0
  66. finish:
  67.         mov     ax,bx
  68.         mov     dx,di
  69.         pop     ds
  70.         pop     di
  71.         pop     si
  72.         pop     bp
  73.         ret
  74.  
  75. _fatol  ENDP
  76.  
  77. _TEXT   ENDS
  78.         END
  79.  
  80.