home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wunderki.zip / DINT.ASM < prev    next >
Assembly Source File  |  1993-08-16  |  2KB  |  157 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    Integer Binary/Decimal Routines            *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    DINT
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. CODE    SEGMENT    BYTE PUBLIC
  16.  
  17.     ASSUME    CS:CODE
  18.  
  19. ; Publics
  20.  
  21.     PUBLIC    Int2Str,Str2Int
  22.  
  23. ; Convert integer to string
  24. ; In    DX:AX = Value
  25. ;    ES:DI = String end pointer
  26. ; Out    CX    = String length
  27. ;    ES:DI = String pointer
  28.  
  29. Int2Str:
  30.  
  31.     MOV    CX,DI
  32.     MOV    SI,10
  33.     MOV    BX,DX
  34.     OR    BX,BX
  35.     JNS    @@1
  36.     NEG    BX
  37.     NEG    AX
  38.     SBB    BX,0
  39.     CALL    @@1
  40.     DEC    DI
  41.     MOV    ES:[DI].b0,'-'
  42.     INC    CX
  43.     RET
  44. @@1:    XOR    DX,DX
  45.     XCHG    AX,BX
  46.     DIV    SI
  47.     XCHG    AX,BX
  48.     DIV    SI
  49.     ADD    DL,'0'
  50.     CMP    DL,'0'+10
  51.     JB    @@2
  52.     ADD    DL,'A'-'0'-10
  53. @@2:    DEC    DI
  54.     MOV    ES:[DI],DL
  55.     MOV    DX,AX
  56.     OR    DX,BX
  57.     JNE    @@1
  58.     SUB    CX,DI
  59.     RET
  60.  
  61. ; Convert string to integer
  62. ; In    CX    = String length
  63. ;    ES:DI = String pointer
  64. ; Out    DX:AX = Value
  65. ;    CX    = Remaining characters
  66. ;    ES:DI = Pointer past string
  67. ;    CF    = 1 if error
  68.  
  69. Str2Int:
  70.  
  71.     XOR    AX,AX
  72.     XOR    DX,DX
  73.     XOR    SI,SI
  74.     JCXZ    @@6
  75.     CMP    BYTE PTR ES:[DI],'+'
  76.     JE    @@1
  77.     CMP    BYTE PTR ES:[DI],'-'
  78.     JNE    @@2
  79.     DEC    SI
  80. @@1:    INC    DI
  81.     DEC    CX
  82.     JE    @@6
  83. @@2:    CMP    BYTE PTR ES:[DI],'$'
  84.     JE    @@7
  85. @@3:    MOV    BL,ES:[DI]
  86.     SUB    BL,'0'+10
  87.     ADD    BL,10
  88.     JNC    @@4
  89.     TEST    DH,0F0H
  90.     JNE    @@6
  91.     PUSH    BX
  92.     SHL    AX,1
  93.     RCL    DX,1
  94.     PUSH    DX
  95.     PUSH    AX
  96.     SHL    AX,1
  97.     RCL    DX,1
  98.     SHL    AX,1
  99.     RCL    DX,1
  100.     POP    BX
  101.     ADD    AX,BX
  102.     POP    BX
  103.     ADC    DX,BX
  104.     POP    BX
  105.     XOR    BH,BH
  106.     ADD    AX,BX
  107.     ADC    DX,0
  108.     INC    DI
  109.     LOOP    @@3
  110. @@4:    MOV    BX,AX
  111.     OR    BX,DX
  112.     JE    @@5a
  113.     OR    SI,SI
  114.     JNS    @@5
  115.     NEG    DX
  116.     NEG    AX
  117.     SBB    DX,0
  118. @@5:    XOR    SI,DX
  119.     JS    @@6
  120. @@5a:    RET
  121. @@6:    STC
  122.     RET
  123. @@7:    INC    DI
  124.     DEC    CX
  125.     JE    @@6
  126. @@8:    MOV    BL,ES:[DI]
  127.     CMP    BL,'a'
  128.     JB    @@9
  129.     SUB    BL,32
  130. @@9:    SUB    BL,'0'+10
  131.     ADD    BL,10
  132.     JC    @@10
  133.     SUB    BL,7+16
  134.     ADD    BL,6
  135.     JNC    @@4
  136.     ADD    BL,10
  137. @@10:    MOV    BH,4
  138. @@11:    SHL    AX,1
  139.     RCL    DX,1
  140.     JC    @@6
  141.     DEC    BH
  142.     JNE    @@11
  143.     OR    AL,BL
  144.     INC    DI
  145.     LOOP    @@8
  146.     OR    SI,SI
  147.     JNS    @@12
  148.     NEG    DX
  149.     NEG    AX
  150.     SBB    DX,0
  151. @@12:    CLC
  152.     RET
  153.  
  154. CODE    ENDS
  155.  
  156.     END
  157.