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 >
Wrap
Text File
|
2000-06-30
|
1KB
|
71 lines
#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