home *** CD-ROM | disk | FTP | other *** search
- #TITLE "24-BIT BINARY TO DECIMAL ROUTINE"
- #PAGE 132,66
- MODULE "BinDec"
- ;
- LOC Data#
- ;
- LEAD0: BYTE 0
- ;
- LOC Code#
- ;
- ; Enter here with DX:AX containing SEGMENT:OFFSET to
- ; print as decimal.
- ;
- SEGDEC::
- PUSH DX
- MOV CL,=4
- SHL DX,CL
- ADD AX,DX
- POP DX
- MOV CL,=12
- SHR DX,CL
- ;
- ;
- ; Enter with 20-bit number in DX and AX
- ; (low nybble of DL = MSN)
- ; ie DX=000F, AX=F000 for FF000
- ; If leading zero suppression, make CH=0 else CH=NZ
- ; DS:BX point to storage for result.
- ; Output: DS:BX points to byte past end of output string
- ; Destroys AX,DX
- ;
- BINDEC::
- MOV LEAD0,CH ; SAVE LEADING 0 FLAG
- MOV CX,=10000 ; DIVIDE BY 10000
- DIV CX ; REMAINDER NOW IN DX
- CALL DEC
- MOV AX,DX
- CWD
- MOV CX,=100 ; NOW DIVIDE BY 100
- DIV CX
- CALL DEC
- MOV AX,DX
- DEC: AAM
- CMP AH,=9
- JNA __NOV
- PUSH AX
- MOV AL,AH
- AAM
- CALL __NOV
- POP AX
- OR AL,=0X30
- JMPS __CL
- ;
- __NOV: OR AX,=0X3030
- CMP AH,='0' ; ZERO?
- JNZ __NZ
- CMP LEAD0,=0 ; LEAD 0 SUPPRESS?
- JZ __CL ; YES, CHECK LOW
- __NZ: MOV LEAD0,AH
- MOV [BX],AH
- INC BX
- __CL: CMP AL,='0'
- JNZ __NZ1
- CMP LEAD0,=0
- JZ __CL1
- __NZ1: MOV LEAD0,AL
- MOV [BX],AL
- INC BX
- __CL1: RET
- END
-