; double precision setting ;;ctlwrd dw 01230h ; note this traps on denormal operands! ;;ctld dw 0133fh ; this doesn't trap
ctld dw 01230h
; single precision
ctls dw 01030h
; long double precision
ctlld dw 01320h
_DATAENDS
PREC_TEXT segment bytepublic'CODE' assumecs:PREC_TEXT,ds:DGROUP ; Set coprocessor to single precision float PUBLIC _sprec
_sprec PROC FAR
fclex
fwait
finit
fwait
fldcw word ptr ctls
fwait ret
_sprec ENDP
; set coprocessor to long double precision PUBLIC _ldprec
_ldprec PROC far
fclex
fwait
finit
fwait
fldcw word ptr ctlld
fwait ret
_ldprec ENDP
; set coprocessor to double precision PUBLIC _dprec
_dprec PROC far
fclex
fwait
finit
fwait
fldcw word ptr ctld
fwait ret
_dprec ENDP
; get a double promoted to long double size ; getld( &doub, &ldoub ); PUBLIC _getld
_getld PROC far push bp mov bp,sp push bx mov bx, word ptr [bp+4] ; fld st(0)
fld qword ptr [bx] mov bx, word ptr [bp+6]
fstp tbyte ptr [bx] mov bx, word ptr [bp+4]
fld qword ptr [bx] mov bx, word ptr [bp+8]
fstp qword ptr [bx] pop bx pop bp ret
_getld ENDP
PUBLIC _getprec
_getprec PROC far push bp mov bp,sp sub sp,4
fstcw [bp-4]
fwait mov ax,[bp-4] add sp,4 pop bp ret
_getprec ENDP
PUBLIC _fpclear
_fpclear PROC far push bp mov bp,sp
fnclex
fwait pop bp ret
_fpclear ENDP
PUBLIC _noexcept
_noexcept PROC far push bp mov bp,sp push ax sub sp,4
fnclex
fwait
fstcw [bp-4]
fwait mov ax,[bp-4] and ax,0FFC0h or ax,003fh mov [bp-4],ax
fldcw [bp-4] add sp,4 pop ax pop bp ret
_noexcept ENDP
; single precision square root ; assumes coprocessor precision already set up ; return value in static __fac PUBLIC _sqrtf
_sqrtf PROC FAR push bp mov bp,sp
fld DWORD PTR [bp+6]
fsqrt
fwait mov sp,bp pop bp ret
_sqrtf ENDP
; double precision square root ; assumes coprocessor precision already set up ; return value in static __fac PUBLIC _sqrt
_sqrt PROC FAR push bp mov bp,sp
fld QWORD PTR [bp+6]
fsqrt
fwait mov sp,bp pop bp ret
_sqrt ENDP
; long double precision square root ; assumes coprocessor precision already set up ; return value in fp register PUBLIC _sqrtl
_sqrtl PROC FAR push bp mov bp,sp
fld tbyte ptr [bp+6]
fsqrt
fwait mov sp,bp pop bp ret
_sqrtl ENDP
PREC_TEXT ends
_DATA segment wordpublic'DATA'
s@ labelbyte
_DATAends
PREC_TEXT segment bytepublic'CODE'
PREC_TEXT ends
_s@ equ s@ public _sprec public _dprec public _ldprec end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.19 Sekunden
(vorverarbeitet am 2026-06-17)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.