home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / CEXPRESS.ZIP / BITS.ASM / HEX2INT.ASM < prev    next >
Assembly Source File  |  1989-05-03  |  2KB  |  72 lines

  1. ;unsigned char  _hex_to_int(hex_string);
  2. ;  char  *hex_string;
  3.  
  4.     EXTRN  _memory_model:byte
  5.     EXTRN  _error_code:byte
  6.  
  7. _TEXT    SEGMENT BYTE PUBLIC 'CODE'
  8.     ASSUME CS:_TEXT
  9.     PUBLIC _hex_to_int
  10. _hex_to_int proc near
  11.     push bp            ;
  12.     mov  bp,sp        ;set stack frame
  13.     cmp  _memory_model,0    ;near or far?
  14.     jle  begin        ;jump if near
  15.     inc  bp            ;else add 2 to BP
  16.     inc  bp            ;
  17. begin:    cmp  _memory_model,2    ;data near or far?
  18.     jb   L0            ;jump if near
  19.     les  di,[bp+4]        ;
  20.     jmp  short L1        ;
  21. L0:    mov  di,[bp+4]        ;
  22.     mov  ax,ds        ;ES = DS
  23.     mov  es,ax        ;
  24. L1:    sub  ax,ax        ;return 0 if error
  25.     mov  dl,0        ;counts chars
  26.     mov  _error_code,1    ;errorcode 1 = null string
  27.     cmp  byte ptr es:[di],0    ;null?
  28.     je   L6            ;quit if so
  29. LY:    cmp  byte ptr es:[di],0    ;move ptr to end of string
  30.     je   L2            ;
  31.     inc  di            ;
  32.     jmp  short LY        ;
  33. L2:    sub  bx,bx        ;
  34.     dec  di            ;move ptr back one
  35.     mov  bl,es:[di]        ;get a char
  36.     cmp  bl,0        ;end of string?
  37.     je   LX            ;
  38.     cmp  bl,0        ;end of string?
  39.     je   L6            ;quit if so
  40.     inc  _error_code    ;errorcode 2 = char out of range
  41.     cmp  bl,48        ;test range
  42.     jb   L6            ;
  43.     cmp  bl,57        ;
  44.     jna  L4            ;
  45.     cmp  bl,97        ;
  46.     jnb  L3            ;
  47.     add  bl,32        ;make lower case
  48. L3:    cmp  bl,97        ;'a'
  49.     jb   L6            ;
  50.     cmp  bl,102        ;'f'
  51.     ja   L6            ;
  52.     sub  bl,87        ;make numeric
  53.     jmp  short L5        ;
  54. L4:    sub  bl,48        ;make numeric
  55. L5:    mov  cl,dl        ;
  56.     shl  cl,1        ;multiply by four
  57.     shl  cl,1        ;
  58.     shl  bx,cl        ;move mask to position
  59.     or   ax,bx        ;copy over the nibble
  60.     inc  dl            ;inc counter
  61.     cmp  dl,4        ;
  62.     jne  L2            ;loop
  63. LX:    mov  _error_code,0    ;no error    
  64. L6:    pop  bp            ;
  65.     cmp  _memory_model,0    ;quit
  66.     jle  quit        ;
  67.     db   0CBh        ;RET far
  68. quit:    ret            ;RET near
  69. _hex_to_int endp
  70. _TEXT    ENDS
  71.     END
  72.