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

📄 testfp.asm

📁 汇编编程艺术
💻 ASM
📖 第 1 页 / 共 4 页
字号:
		include		stdlib.a
		includelib 	stdlib.lib
;
lesi		macro	adrs
		mov     di, seg adrs
		mov	es, di
		lea	di, adrs
		endm
;
ldxi		macro	adrs
		mov	dx, seg adrs
		lea	si, adrs
		endm
;
;****************************************************************************
;
; T  E  S  T       S  U  I  T  E      F  O  R
;
;	Floating Point Routines in
;
; T H E   U C R     S  T  A  N  D  A  R  D
;
; L  I  B  R  A  R  Y     F  O  R     A  S  S  E  M  B  L  Y
;
; L  A  N  G  U  A  G  E     P  R  O  G  R  A  M  M  E  R  S
;
;****************************************************************************
;
;
; Global variables go here:
;
StdData		segment	para public 'sldata'
		extrn	fpacc:byte
StdData		ends
;
;
dseg		segment	para public 'data'
;
MemAvail	dw	?
;
Roundatof	dt	5.0e-19
;
; Floating point values:
;
SPConst1	dd	1.0
SPConst10	dd	-10.25
SPConst100	dd	100.50
SPConst1000	dd	-1000.75
SPConst10000	dd	10000.22
SPConst100000	dd	-100000.44
SPConst1000000	dd	1000000.66
SPConst123456	dd	-123456.88
SPConst65432	dd	65432.11
SPConst9876	dd	-9876.33
SPConst192	dd	192.55
SPConst38	dd	-38.77
SPConst9	dd	9.99
;
DPConst1	dq	1.0
DPConst10	dq	-10.25
DPConst100	dq	100.50
DPConst1000	dq	-1000.75
DPConst10000	dq	10000.22
DPConst100000	dq	-100000.44
DPConst1000000	dq	123456789012345678.66
DPConst123456	dq	-123456.88
DPConst65432	dq	65432.11
DPConst9876	dq	-9876.33
DPConst192	dq	192.55
DPConst38	dq	-38.77
DPConst9	dq	9.99
;
EPConst1	dt	1.0
EPConst10	dt	-10.25
EPConst100	dt	100.50
EPConst1000	dt	-1000.75
EPConst10000	dt	10000.22
EPConst100000	dt	-100000.44
EPConst1000000	dt	123456789012345678901.66
EPConst123456	dt	-123456.88
EPConst65432	dt	65432.11
EPConst9876	dt	-9876.33
EPConst192	dt	192.55
EPConst38	dt	-38.77
EPConst9	dt	9.99
;
Temp		dt	?
Output		db      128 dup (0)		;Tests ftoa/2
;
Testatof1	db	"1.2345678901234567890",0
Testatof2	db	"1.23456789",0
Testatof3	db	"123456789",0
Testatof4	db	"-1.0",0
Testatof5	db	"1.0e10",0
Testatof6	db	"-1.0e10",0
Testatof7	db	"1.0e-10",0
Testatof8	db	"-1.0e-10",0
Testatof9	db	"1234567890e-9",0
Testatof10	db	"1.0e0",0
Testatof11	db	"1.0e1",0
Testatof12	db	"1.0e2",0
Testatof13	db	"1.0e3",0
Testatof14	db	"1.0e4",0
Testatof15	db	"1.0e5",0
Testatof16	db	"1.0e7",0
Testatof17	db	"1.0e8",0
Testatof18	db	"1.0e9",0
Testatof19	db	"1.0e15",0
Testatof20	db	"1.0e16",0
Testatof21	db	"1.0e17",0
Testatof22	db	"1.0e31",0
Testatof23	db	"1.0e32",0
Testatof24	db	"1.0e33",0
Testatof25	db	"1.0e63",0
Testatof26	db	"1.0e64",0
Testatof27	db	"1.0e65",0
Testatof28	db	"1.0e127",0
Testatof29	db	"1.0e128",0
Testatof30	db	"1.0e129",0
Testatof31	db	"1.0e255",0
Testatof32	db	"1.0e256",0
Testatof33	db	"1.0e257",0
Testatof34	db	"1.0e511",0
Testatof35	db	"1.0e512",0
Testatof36	db	"1.0e513",0
Testatof37	db	"1.0e1023",0
Testatof38	db	"1.0e1024",0
Testatof39	db	"1.0e1025",0
Testatof40	db	"1.0e2048",0
;
Testatof41	db	"9.999999999999999e0",0
Testatof42	db	"9.999999999999999e1",0
Testatof43	db	"9.999999999999999e3",0
Testatof44	db	"9.999999999999999e7",0
Testatof45	db	"9.999999999999999e15",0
Testatof46	db	"9.999999999999999e31",0
Testatof47	db	"9.999999999999999e63",0
Testatof48	db	"9.999999999999999e127",0
Testatof49	db	"9.999999999999999e255",0
Testatof50	db	"9.999999999999999e511",0
Testatof51	db	"9.999999999999999e1023",0
Testatof52	db	"9.999999999999999e2047",0
;
mTestatof11	db	"1.0e-1",0
mTestatof12	db	"1.0e-2",0
mTestatof13	db	"1.0e-3",0
mTestatof14	db	"1.0e-4",0
mTestatof15	db	"1.0e-5",0
mTestatof16	db	"1.0e-7",0
mTestatof17	db	"1.0e-8",0
mTestatof18	db	"1.0e-9",0
mTestatof19	db	"1.0e-15",0
mTestatof20	db	"1.0e-16",0
mTestatof21	db	"1.0e-17",0
mTestatof22	db	"1.0e-31",0
mTestatof23	db	"1.0e-32",0
mTestatof24	db	"1.0e-33",0
mTestatof25	db	"1.0e-63",0
mTestatof26	db	"1.0e-64",0
mTestatof27	db	"1.0e-65",0
mTestatof28	db	"1.0e-127",0
mTestatof29	db	"1.0e-128",0
mTestatof30	db	"1.0e-129",0
mTestatof31	db	"1.0e-255",0
mTestatof32	db	"1.0e-256",0
mTestatof33	db	"1.0e-257",0
mTestatof34	db	"1.0e-511",0
mTestatof35	db	"1.0e-512",0
mTestatof36	db	"1.0e-513",0
mTestatof37	db	"1.0e-1023",0
mTestatof38	db	"1.0e-1024",0
mTestatof39	db	"1.0e-1025",0
mTestatof40	db	"1.0e-2048",0
;
mTestatof41	db	"9.999999999999999e-1",0
mTestatof42	db	"9.999999999999999e-2",0
mTestatof43	db	"9.999999999999999e-3",0
mTestatof44	db	"9.999999999999999e-5",0
mTestatof45	db	"9.999999999999999e-9",0
mTestatof46	db	"9.999999999999999e-17",0
mTestatof47	db	"9.999999999999999e-33",0
mTestatof48	db	"9.999999999999999e-65",0
mTestatof49	db	"9.999999999999999e-129",0
mTestatof50	db	"9.999999999999999e-257",0
mTestatof51	db	"9.999999999999999e-513",0
mTestatof52	db	"9.999999999999999e-1025",0
Testatof53	db	"9.999999999999999e-2049",0



dseg		ends




cseg		segment	para public 'code'
		assume	cs:cseg, ds:dseg




		public	PSP
PSP		dw	?

;
;
; Main is the main program.  Program execution always begins here.
;
Main		proc
		mov	cs:PSP, es		;Save pgm seg prefix
		mov	ax, seg dseg		;Set up the segment registers
		mov	ds, ax
		mov	es, ax
		mov	dx, 0			;Allocate all available RAM.
		MemInit
		mov	MemAvail, cx
		printf
		db	"There are %x paragraphs of memory available."
		db	cr,lf,lf,0
		dd	MemAvail
;
;
;
;
;***************************************************************************
;
; Test the floating point routines.



		print
		db	"Testing fpadd with some (previously) troublesome "
		db	"values:",cr,lf,0

		print
		db	"0+0 = ",0
		lefpal
		dt	0.0
		lefpol
		dt	0.0
		fpadd
		mov	ax, 208h
		ftoam

		puts
		free
		putcr

		print
		db	"1+0 = ",0
		lefpal
		dt	1.0
		lefpol
		dt	0.0
		fpadd
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"0+1 = ",0
		lefpal
		dt	0.0
		lefpol
		dt	1.0
		fpadd
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"1+(-1) = ",0
		lefpal
		dt	1.0
		lefpol
		dt	-1.0
		fpadd
		mov	ax, 208h
		ftoam
		puts
		free
		putcr


		print
		db	"Testing fpmul with some (previously) troublesome "
		db	"values:",cr,lf,0

		print
		db	"0*0 = ",0
		lefpal
		dt	0.0
		lefpol
		dt	0.0
		fpmul
		mov	ax, 208h
		ftoam

		puts
		free
		putcr

		print
		db	"1*0 = ",0
		lefpal
		dt	1.0
		lefpol
		dt	0.0
		fpmul
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"0*1 = ",0
		lefpal
		dt	0.0
		lefpol
		dt	1.0
		fpmul
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"1*(-1) = ",0
		lefpal
		dt	1.0
		lefpol
		dt	-1.0
		fpMul
		mov	ax, 208h
		ftoam
		puts
		free
		putcr



		print
		db	cr,lf
		db	"Testing ftoa with some (previously) troublesome "
		db	"values:",cr,lf,0

		print
		db	"3999.0 = ",0
		lefpal
		dt	3999.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"4000.0 = ",0
		lefpal
		dt	4000.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"4001.0 = ",0
		lefpal
		dt	4001.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"4090.0 = ",0
		lefpal
		dt	4090.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"4095.0 = ",0
		lefpal
		dt	4095.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"4096.0 = ",0
		lefpal
		dt	4096.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"7999.0 = ",0
		lefpal
		dt	7999.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"8000.0 = ",0
		lefpal
		dt	8000.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"8001.0 = ",0
		lefpal
		dt	8001.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"8100.0 = ",0
		lefpal
		dt	8100.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"8191.0 = ",0
		lefpal
		dt	8191.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr


		print
		db	"8192.0 = ",0
		lefpal
		dt	8192.0
		mov	ax, 208h
		ftoam
		puts
		free
		putcr

		print
		db	"15999.0 = ",0
		lefpal
		dt	15999.0
		mov	ax, 209h
		ftoam
		puts
		free
		putcr

		print
		db	"16000.0 = ",0
		lefpal
		dt	16000.0
		mov	ax, 209h
		ftoam
		puts
		free
		putcr

		print
		db	"16001.0 = ",0
		lefpal
		dt	16001.0
		mov	ax, 209h
		ftoam
		puts
		free
		putcr

		print
		db	"16100.0 = ",0
		lefpal
		dt	16100.0
		mov	ax, 209h
		ftoam
		puts
		free
		putcr

		print
		db	"16383.0 = ",0
		lefpal
		dt	16383.0
		mov	ax, 209h
		ftoam
		puts
		free
		putcr

		print
		db	"16384.0 = ",0
		lefpal
		dt	16384.0
		mov	ax, 209h
		ftoam
		puts
		free
		putcr


		print
		db	cr,lf
		db	"Testing itof:",cr,lf,0
;
		mov	ax, 1
Testitoflp:	push	ax
		mov	cx, 6
		putisize
		print
		db	" = ",0
		itof
		mov	ax, 209h
		ftoam
		puts
		free
		call	putfpacc
		putcr
		pop	ax
		cmp	ax, 10000
		jg	TestItofDone
		cmp	ax, -10000
		jl	TestItofDone
		mov	cx, ax
		mov	bx, -10
		mul	bx
		add	ax, cx
		jmp   	Testitoflp
;
TestItofDone:   putcr
;
;----
;
		print
		db	"Testing utof:",cr,lf,0
;
		mov	ax, 1
Testutoflp:	push	ax
		mov	cx, 5
		putusize
		print
		db	" = ",0
		utof
		mov	ax, 209h
		ftoam
		puts
		free
		call	putfpacc
		putcr
		pop	ax
		cmp	ax, 10000
		ja	TestUtofDone
		mov	cx, ax
		mov	bx, 10
		mul	bx
		add	ax, cx
		jmp   	Testutoflp
;
TestUtofDone:   putcr
;
;----
;
		print
		db	"Testing ltof:",cr,lf,0
;
		mov	ax, 1
		mov	dx, 0
Testltoflp:	push	ax
		push	dx
		mov	cx, 11
		putlsize
		print
		db	" = ",0
		ltof
		mov	ax, 20eh
		ftoam
		puts
		free
		call	putfpacc
		putcr
		pop	dx
		pop	ax
		push	dx
		cmp	ax, 0ca00h		;low(1e9)
		sbb	dx, 3b9ah		;high(1e9)
		pop	dx
		ja	TestLtofDone
		shl	ax, 1			;Multiply by 10.
		rcl	dx, 1
		mov	si, ax
		mov	di, dx
		shl	ax, 1
		rcl	dx, 1
		shl	ax, 1
		rcl	dx, 1
		add	ax, si
		adc	dx, di
		jmp   	Testltoflp
;
TestLtofDone:   putcr
;
		mov	ax, -1
		mov	dx, -1
Testltoflp2:	push	ax
		push	dx
		mov	cx, 11
		putlsize
		print
		db	" = ",0
		ltof
		mov	ax, 20eh
		ftoam
		puts
		free
		call	putfpacc
		putcr
		pop	dx
		pop	ax
		push	dx
		push	ax
		sub	ax, 3600h		;low(-1e9)
		sbb	dx, 0c465h		;high(1e9)
		pop	ax
		pop	dx
		jb	TestLtofDone2
		shl	ax, 1			;Multiply by 10.
		rcl	dx, 1
		mov	si, ax
		mov	di, dx
		shl	ax, 1
		rcl	dx, 1
		shl	ax, 1
		rcl	dx, 1
		add	ax, si
		adc	dx, di
		jmp   	Testltoflp2
;
TestLtofDone2:  putcr
;
		print
		db	cr,lf
		db	"Testing ULTOF",cr,lf,0
;
		mov	ax, 1
		mov	dx, 0
Testultoflp2:	push	ax
		push	dx
		mov	cx, 11
		putulsize
		print
		db	" = ",0
		ultof
		mov	ax, 20eh
		ftoam
		puts
		free
		call	putfpacc
		putcr
		pop	dx
		pop	ax
		push	dx
		push	ax
		sub	ax, 3600h		;low(-1e9)
		sbb	dx, 0c465h		;high(1e9)
		pop	ax
		pop	dx
		ja	TestuLtofDone2
		shl	ax, 1			;Multiply by 10.
		rcl	dx, 1
		mov	si, ax
		mov	di, dx
		shl	ax, 1
		rcl	dx, 1
		shl	ax, 1
		rcl	dx, 1
		add	ax, si
		adc	dx, di
		jmp   	Testultoflp2
;
TestuLtofDone2:  putcr
;
;
;----
;
		print
		db	"Testing LSFPA:",cr,lf,0
;
		lesi	SPConst1
		lsfpa
		print
		db	"       1.0 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst10
		lsfpa
		print
		db	"    -10.25 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst100
		lsfpa
		print
		db	"    100.50 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst1000
		lsfpa
		print
		db	"  -1000.75 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst10000
		lsfpa
		print
		db	"  10000.22 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst100000
		lsfpa
		print
		db	" -10000.44 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst1000000
		lsfpa
		print
		db	"1000000.66 =",0
		mov	ax, 20bh
		ftoam
		puts
		print
		db	"  Note: only 6-7 significant digits.",cr,lf,0
		free
;
		lesi	SPConst123456
		lsfpa
		print
		db	"-123456.88 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst65432
		lsfpa
		print
		db	"  65432.11 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst9876
		lsfpa
		print
		db	"  -9876.33 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst192
		lsfpa
		print
		db	"    192.55 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst38
		lsfpa
		print
		db	"    -38.77 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst9
		lsfpa
		print
		db	"      9.99 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		putcr
		free
;
;
;----
;
		print
		db	"Testing SSFPA:",cr,lf,0
;
		lesi	SPConst1
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"       1.0 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst10
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"    -10.25 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst100
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"    100.50 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst1000
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"  -1000.75 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst10000
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"  10000.22 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst100000
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	" -10000.44 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst1000000
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"1000000.66 =",0
		mov	ax, 20bh
		ftoam
		puts
		print
		db	"  Note: only 6-7 significant digits.",cr,lf,0
		free
;
		lesi	SPConst123456
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"-123456.88 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst65432
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"  65432.11 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst9876
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"  -9876.33 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst192
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"    192.55 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst38
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"    -38.77 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	SPConst9
		lsfpa
		lesi	Temp
		ssfpa
		lefpal
		dt	0.0
		lsfpa
		print
		db	"      9.99 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		putcr
		free
;
;
;----
;
		print
		db	"Testing LDFPA:",cr,lf,0
;
		lesi	DPConst1
		ldfpa
		print
		db	"       1.0 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	DPConst10
		ldfpa
		print
		db	"    -10.25 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	DPConst100
		ldfpa
		print
		db	"    100.50 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	DPConst1000
		ldfpa
		print
		db	"  -1000.75 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	DPConst10000
		ldfpa
		print
		db	"  10000.22 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	DPConst100000
		ldfpa
		print
		db	" -10000.44 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	DPConst1000000
		ldfpa
		print
		db	"123456789012345678.66 =",0
		mov	ax, 216h
		ftoam
		puts
		print
		db	"  Note: only 17 sig. digits.",cr,lf,0
		free
;
		lesi	DPConst123456
		ldfpa
		print
		db	"-123456.88 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	DPConst65432
		ldfpa
		print
		db	"  65432.11 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free
;
		lesi	DPConst9876
		ldfpa
		print
		db	"  -9876.33 =",0
		mov	ax, 20bh
		ftoam
		puts
		putcr
		free

⌨️ 快捷键说明

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