home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBODSG / BINDEC.A < prev    next >
Text File  |  2000-06-30  |  1KB  |  71 lines

  1.     #TITLE    "24-BIT BINARY TO DECIMAL ROUTINE"
  2.     #PAGE    132,66
  3.     MODULE    "BinDec"
  4. ;
  5.     LOC    Data#
  6. ;
  7. LEAD0:    BYTE    0
  8. ;
  9.     LOC    Code#
  10. ;
  11. ;    Enter here with DX:AX containing SEGMENT:OFFSET to
  12. ;    print as decimal.
  13. ;
  14. SEGDEC::
  15.     PUSH    DX
  16.     MOV    CL,=4
  17.     SHL    DX,CL
  18.     ADD    AX,DX
  19.     POP    DX
  20.     MOV    CL,=12
  21.     SHR    DX,CL
  22. ;
  23. ;
  24. ;    Enter with 20-bit number in DX and AX
  25. ;    (low nybble of DL = MSN)
  26. ;    ie DX=000F, AX=F000 for FF000
  27. ;    If leading zero suppression, make CH=0 else CH=NZ
  28. ;    DS:BX point to storage for result.
  29. ;    Output: DS:BX points to byte past end of output string
  30. ;    Destroys AX,DX
  31. ;
  32. BINDEC::
  33.     MOV    LEAD0,CH        ; SAVE LEADING 0 FLAG
  34.     MOV    CX,=10000        ; DIVIDE BY 10000
  35.     DIV    CX            ; REMAINDER NOW IN DX
  36.     CALL    DEC
  37.     MOV    AX,DX
  38.     CWD
  39.     MOV    CX,=100            ; NOW DIVIDE BY 100
  40.     DIV    CX
  41.     CALL    DEC
  42.     MOV    AX,DX
  43. DEC:    AAM
  44.     CMP    AH,=9
  45.     JNA    __NOV
  46.     PUSH    AX
  47.     MOV    AL,AH
  48.     AAM
  49.     CALL    __NOV
  50.     POP    AX
  51.     OR    AL,=0X30
  52.     JMPS    __CL
  53. ;
  54. __NOV:    OR    AX,=0X3030
  55.     CMP    AH,='0'            ; ZERO?
  56.     JNZ    __NZ
  57.     CMP    LEAD0,=0        ; LEAD 0 SUPPRESS?
  58.     JZ    __CL            ;   YES, CHECK LOW
  59. __NZ:    MOV    LEAD0,AH
  60.     MOV    [BX],AH
  61.     INC    BX
  62. __CL:    CMP    AL,='0'
  63.     JNZ    __NZ1
  64.     CMP    LEAD0,=0
  65.     JZ    __CL1
  66. __NZ1:    MOV    LEAD0,AL
  67.     MOV    [BX],AL
  68.     INC    BX
  69. __CL1:    RET
  70.     END
  71.