home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS - Coast to Coast
/
simteldosarchivecoasttocoast2.iso
/
asmutil
/
stdlib.zip
/
ITOA.ASM
< prev
next >
Wrap
Assembly Source File
|
1990-07-08
|
2KB
|
113 lines
;
stdlib segment para public 'slcode'
assume cs:stdlib
extrn sl_malloc:far
;
; Local variables for these routines:
;
astr db 8 dup (?)
aindex dw 0
;
; ITOA- Converts the signed integer value in AX to a string of characters.
; Returns a pointer to the string in ES:DI.
; Carry indicates error (set if insufficient room in heap).
;
public sl_itoa
sl_itoa proc far
push ax bx cx dx
mov cs:aindex, 0
cmp ax, 0
jge Doit
push ax
mov al, '-'
call PutIt
pop ax
neg ax
;
DoIt: call puti2
;
; Move the digit string out onto the heap and return a pointer to it in
; es:di.
;
mov cx, cs:aindex
mov bx, cx ;Save for later.
inc cx
call sl_malloc ;Allocate storage for string.
jc BadITOA
CopyStrLp: mov al, cs:astr[bx]
mov es:[di][bx], al
dec bx
jns CopyStrLp
clc
pop dx cx bx ax
ret
;
BadITOA: stc
pop dx cx bx ax
ret
sl_itoa endp
;
;
; UTOA- Converts the unsigned integer value in AX to a string of digits
; and returns a pointer to this string in ES:DI.
; Carry=0 if no error, 1 if insufficient room on heap.
;
public sl_utoa
sl_utoa proc far
push ax bx cx dx
mov cs:aindex, 0
call PutI2
;
; Move the digit string out onto the heap and return a pointer to it in
; es:si.
;
mov cx, cs:aindex
mov bx, cx ;Save for later.
inc cx
call sl_malloc ;Allocate storage for string.
jc BadUTOA
CopyStrLp2: mov al, cs:astr[bx]
mov es:[di][bx], al
dec bx
jns CopyStrLp2
clc
pop dx cx bx ax
ret
;
BadUTOA: stc
pop dx cx bx ax
ret
sl_utoa endp
;
; PutI2- Recursive routine to actually print the value in AX as an integer.
;
Puti2 proc near
mov bx, 10
xor dx, dx
div bx
or ax, ax ;See if ax=0
jz Done
push dx
call Puti2
pop dx
Done: mov al, dl
or al, '0'
call PutIt
ret
PutI2 endp
;
;
; PutIt- Writes the character in AL to the "astr" buffer. Also zero
; terminates the string and increments aindex. Note: no need to preserve
; DI here because no one else uses it.
;
PutIt proc near
mov di, cs:aindex
mov cs:astr[di], al
mov byte ptr cs:astr+1[di], 0
inc cs:aindex
ret
PutIt endp
stdlib ends
end