⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setprec.87

📁 数学运算库源码
💻 87
字号:
;; Microsoft MASM subroutines for setting coprocessor precision;.286.287_TEXT	SEGMENT  BYTE PUBLIC 'CODE'_TEXT	ENDSCONST	SEGMENT  WORD PUBLIC 'CONST'CONST	ENDS_BSS	SEGMENT  WORD PUBLIC 'BSS'_BSS	ENDS_DATA	SEGMENT  WORD PUBLIC 'DATA'_DATA	ENDSDGROUP	GROUP	CONST,	_BSS,	_DATA	ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUPEXTRN	__fac:QWORD_BSS      SEGMENTEXTRN	__fltused:NEAR_BSS      ENDS; exception masks (1 = masked);   1  invalid operation;   2  denormalized operand;   4  zero divide;   8  overflow;  10  underflow;  20  precision_DATA SEGMENT; double precision setting;;ctlwrd dw 01230h ; note this traps on denormal operands!;;ctld dw 0133fh   ; this doesn't trapctld dw 01230h; single precisionctls dw 01030h; long double precisionctlld dw 01320h_DATA ENDS	ASSUME  CS: _TEXT_TEXT SEGMENT; Set coprocessor to single precision float	PUBLIC	_sprec_sprec	PROC NEAR	fclex	fwait	finit	fwait	fldcw word ptr ctls	fwait	ret_sprec ENDP; set coprocessor to long double precision	PUBLIC	_ldprec_ldprec PROC NEAR	fclex	fwait	finit	fwait	fldcw word ptr ctlld	fwait	ret_ldprec ENDP; set coprocessor to double precision	PUBLIC	_dprec_dprec PROC NEAR	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 NEAR	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 NEAR	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 NEAR	push bp	mov bp,sp	fnclex	fwait	pop bp	ret_fpclear	ENDP	PUBLIC	_noexcept_noexcept	PROC NEAR	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 NEAR;	push bp;	mov bp,sp;	fld	DWORD PTR [bp+4];	fsqrt;	fwait	;	fstp	DWORD PTR __fac;	mov	ax,OFFSET __fac;	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 NEAR;	push bp;	mov bp,sp;	fld	QWORD PTR [bp+4];	fsqrt;	fwait	;	fstp	QWORD PTR __fac;	mov	ax,OFFSET __fac;	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 NEAR;	push bp;	mov bp,sp;	fld tbyte ptr [bp+4];	fsqrt;	fwait	;	mov	sp,bp;	pop bp;	ret;_sqrtl	ENDP;_TEXT ENDSEND

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -