Newbie Alert !!!
- From: "Mel Smith" <medsyntel@xxxxxxx>
- Date: Mon, 21 Apr 2008 19:20:27 -0600
Dear Friends:
I'm an application programmer (in an xBase language called xHarbour -- a
superset of Clipper )
I have a very old assembly language file (named treal.asm) circa 1991.
I need to assemble this file with MASM32 (which I have on my machine).
I propose assembling this file with the command:
ML /c treal.asm
Then I'll link in the resulting object module (treal.obj) with the
remainder of my modules.
*But*, when I try to assemble this file (which is shown below), I get
masses of errors (Segment, etc)
Can somebody please correct the old usage below, so that it will
assemble ??
TIA,
-Mel Smith
*************** the code is below ***********
IDEAL
WARN
EXTRN __parc:FAR, __parnd:FAR, __retclen:FAR, __retnd:FAR
SEGMENT _prog DWORD 'CODE'
ASSUME cs:_prog, ds:nothing, es:nothing
;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;
;;
;; Syntax: string-10 := l_dtot( <number> )
;;
;; Purpose: Converts an IEEE 8 byte into an IEEE 10 byte real.
;;
;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;
PUBLIC l_dtot
PROC l_dtot FAR
push bp
mov bp, sp
xor ax, ax ; Push a 0 TREAL onto the stack.
push ax
push ax
push ax
push ax
push ax
inc ax ; Get the address of our double.
push ax
call __parnd
pop bx
mov bx, sp ; Base address of TREAL.
mov cx, 10 ; Setup return logic for __retclen.
push cx
push ss
push bx
push ds ; Save what we mangle...
push si
push di
mov ds, dx ; Return from __parnd is source.
mov si, ax
push ds ; Test for 0.
pop es
mov di, si
xor ax, ax
mov cx, 4
rep scasw
je @@skip
push ss ; Stack is destination.
pop es
mov di, bx
;;
;; This next step is kinda kludgy. The mantissa of an 8-IEEE is shifted
;; 4 bits from the 10-IEEE. But the assumed 1.0 of an 8-IEEE isn't in
;; the 10-IEEE. That means that we end up with a 3-bit shift and an
;; explicit 1 bit added (except for 0).
;;
mov cl, 5
xor ax, ax ; LSB will always be 0. First 3 bits
stosb ; of next nibble will also be 0.
REPT 6
lodsb
rol ax, 1
rol ax, 1
rol ax, 1
stosb
shl ah, cl
ENDM
lodsb ; Special processing for last byte to
rol ax, 1 ; keep the start of the mantissa out
rol ax, 1 ; of it.
rol ax, 1
rol ax, 1
stc
rcr al, 1
stosb
;;
;; We have the LS-nibble of the exponent in AH now. Load the rest
;; (including the sign), change the bias from 1023 (QUAD) to 16383
;; (TREAL), and store it all...
;;
lodsb
mov bh, al ; Save sign bit.
dec cl
shl ah, cl
rol ax, cl
and ah, 07h
add ax, 16383d - 1023d
and bh, 80h ; Move in sign.
or ah, bh
stosw
@@skip: pop di ; Restore mangled registers.
pop si
pop ds
call __retclen ; Make our call and return.
mov sp, bp
pop bp
ret
ENDP
.
- Follow-Ups:
- Re: Newbie Alert !!!
- From: Rod Pemberton
- Re: Newbie Alert !!!
- Prev by Date: Re: Linking TASM objs with current C++ stuff and linkers
- Next by Date: Code performance, rdtsc and code alignment
- Previous by thread: Re: Linking TASM objs with current C++ stuff and linkers
- Next by thread: Re: Newbie Alert !!!
- Index(es):
Relevant Pages
|