📄 testfp.asm
字号:
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 + -