pcs/flo2hex.asm

106 lines
3.0 KiB
NASM
Raw Normal View History

2023-05-20 05:57:05 -04:00
name flo2hex
title Convert Floating Point Number to Hex Ascii
page 62,132
; =====> FLO2HEX.ASM
;****************************************************************
;* TIPC Scheme Runtime Support *
;* *
;* (C) Copyright 1987 by Texas Instruments Incorporated. *
;* All rights reserved. *
;* *
;* Author: Terry Caudill *
;* Date written: 10 March 1987 *
;****************************************************************
DGROUP group data
data segment word public 'DATA'
assume DS:DGROUP
hexbuf db 030h,031h,032h,033h,034h,035h,036h,037h,038h,039h
db 041h,042h,043h,044h,045h,046h
data ends
XGROUP group PROGX
PROGX segment byte public 'PROGX'
assume CS:XGROUP,DS:DGROUP
;************************************************************************
;* *
;* Routine Name: FLO2HEX *
;* *
;* Description: FLO2HEX is a %escape routine provided for PC+ and *
;* is used to return the Hex Ascii value of a floating *
;* point number when outputting kb's in fsl format. *
;* *
;* Calling Sequence: (FLO2HEX float string #words) *
;* where: float = the floating point number *
;* string = a return string to place result *
;* #words = size of the float to be converted *
;* will be 4 for floating point *
;* *
;* Note: Actually, this routine can be called with integers, etc. *
;* *
;************************************************************************
INARGS struc
OLDBP DW ?
FRETN DD ? ; Far return to 'prog' segment
NRETN DW ? ; Return from flo2hex
_STRING DW ?
_FLOAT DW ?
_WORDS DW ?
INARGS ENDS
%flo2hex proc far
push BP
mov BP,SP
mov si,[bp]._FLOAT ; floating point value
mov di,[bp]._STRING ; string for result
mov dx,[bp]._WORDS ; #words to convert
mov bx,offset hexbuf
mov cl,4 ; shift count
cld
movdigits:
lodsw ; get word to convert
push ax ; save word
shr ax,cl ; work on high byte
shr ax,cl
call cvthex ; convert lower byte
stosw ; store into string
pop ax ; restore word
xor ah,ah ; now work lower byte
call cvthex ; convert it
stosw ; store into string
dec dx ; any more words?
jne movdigits ; yes, jump
xor al,al ; 0 terminate the string
stosb
mov ax,[bp]._STRING ; return string
pop BP
ret ; return to caller.
%flo2hex endp
cvthex proc near
shl ax,cl ; seperate digits
shr al,cl ; work on lower nibble
xlat ; convert to hex
xchg ah,al ; work on upper nibble
xlat ; convert to hex
ret ; return with hex ascii value
cvthex endp
PROGX ends
PGROUP group prog
prog segment byte public 'PROG'
assume CS:PGROUP
public flo2hex
flo2hex proc near
call %flo2hex
ret
flo2hex endp
prog ends
end