Category : Assembly Language Source Code
Archive   : RHSTDLIB.ZIP
Filename : HTOA.ASM

 
Output of file : HTOA.ASM contained in archive : RHSTDLIB.ZIP

stdlib segment para public 'slcode'
assume cs:stdlib
extrn sl_malloc:far
;
;
astr db 8 dup (?)
aindex dw 0
;
; HTOA- Converts value in AL to a string of length two containing two
; hexadecimal characters. A pointer to this string gets returned
; in the ES:DI registers. Returns carry clear if no error. Returns
; carry set if there isn't enough room on the heap to allocate the
; string.
;
public sl_htoa
sl_htoa proc far
push ax bx cx
mov cs:aindex, 0
call hextoa
;
; 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 BadHTOA
CopyStrLp: mov al, cs:astr[bx]
mov es:[di][bx], al
dec bx
jns CopyStrLp
clc
pop cx bx ax
ret
;
BadHTOA: stc
pop cx bx ax
ret
sl_htoa endp
;
;
; WTOA- Converts the binary value in AX to a string of four hexadecimal
; characters. Returns a pointer to the string in ES:DI. Returns
; carry clear if no error, carry set if an error occurred (not enough
; space available in heap).
;
public sl_wtoa
sl_wtoa proc far
push ax bx cx
mov cs:aindex, 0
xchg al, ah
call hextoa
xchg al, ah
call hextoa
;
; 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 BadWTOA
CopyStrLp2: mov al, cs:astr[bx]
mov es:[di][bx], al
dec bx
jns CopyStrLp2
clc
pop cx bx ax
ret
;
BadWTOA: stc
pop cx bx ax
ret
sl_wtoa endp
;
;
;
hextoa proc near
push ax
mov ah, al
shr al, 1
shr al, 1
shr al, 1
shr al, 1
add al, 90h
daa
adc al, 40h
daa
call putit
mov al, ah
and al, 0fh
add al, 90h
daa
adc al, 40h
daa
call putit
pop ax
ret
hextoa 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