home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
pascal
/
tplib21.zip
/
INSTALL.EXE
/
SUCNVRT.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-06-24
|
5KB
|
109 lines
; TURBO PASCAL LIBRARY 2.1
; Number-to-string conversion module
TITLE UNIT STRINGS: Number-to-string conversion module
PAGE 66,132
%BIN 12
CODE SEGMENT WORD
ASSUME CS:CODE
LOCALS
PUBLIC HEXSTR,OCTSTR,BINSTR
PAGE
; FUNCTION HexStr (n: WORD; count: BYTE): STRING
; Return hex. representation of n in string of count characters
HEXSTR PROC FAR
PUSH BP
MOV BP,SP ; Set up stack frame pointer
MOV CX,[BP+6]
XOR CH,CH ; Get count in CX
MOV DX,[BP+8] ; Get word to convert in DX
LES DI,[BP+10] ; Point ES:DI to output string
MOV ES:[DI],CL ; Store output string length
JCXZ @@L3
ADD DI,CX ; Point DI to last character
STD
MOV BL,04H ; Shift value for conversion
@@L1: MOV AX,DX
AND AL,0FH ; Mask to leave one digit only
OR AL,30H ; Convert to ASCII character
CMP AL,3AH ; Check for hex. A thru F
JB @@L2
ADD AL,07H
@@L2: STOSB ; Store hex. digit in string
XCHG BX,CX
SHR DX,CL ; Shift out digit converted
XCHG BX,CX
LOOP @@L1 ; Go do next character
@@L3: POP BP
RET 4
HEXSTR ENDP
PAGE
; FUNCTION OctStr (n: WORD; count: BYTE): STRING
; Return octal representation of n in string of count characters
OCTSTR PROC FAR
PUSH BP
MOV BP,SP ; Set up stack frame pointer
MOV CX,[BP+6]
XOR CH,CH ; Get count in CX
MOV DX,[BP+8] ; Get word to convert in DX
LES DI,[BP+10] ; Point ES:DI to output string
MOV ES:[DI],CL ; Store output string length
JCXZ @@L2
ADD DI,CX ; Point DI to last character
STD
MOV BL,03H ; Shift value for conversion
@@L1: MOV AX,DX
AND AL,07H ; Mask to leave one digit only
OR AL,30H ; Convert to ASCII character
STOSB ; Store octal digit in string
XCHG BX,CX
SHR DX,CL ; Shift out digit converted
XCHG BX,CX
LOOP @@L1 ; Go do next character
@@L2: POP BP
RET 4
OCTSTR ENDP
PAGE
; FUNCTION BinStr (n: WORD; count: BYTE): STRING;
; Return binary representation of n using count characters
BINSTR PROC FAR
PUSH BP
MOV BP,SP ; Set up stack frame pointer
MOV CX,[BP+6]
XOR CH,CH ; Get count in CX
LES DI,[BP+10] ; Point ES:DI to output string
MOV ES:[DI],CL ; Store output string length
JCXZ @@L4
MOV DX,[BP+8] ; Get word to convert in DX
MOV AL,30H ; ASCII zero
ADD DI,CX ; Point DI to last character
STD
@@L1: SHR DX,1 ; Shift bit to carry for test
JNC @@L2 ; If 1, change AL to ASCII one
INC AL
@@L2: STOSB ; Store digit
JNC @@L3 ; Restore AL if necessary
DEC AL
@@L3: LOOP @@L1 ; Go do next bit
@@L4: POP BP
RET 4
BINSTR ENDP
CODE ENDS
END