|
楼主 |
发表于 2020-7-9 21:58:01
|
显示全部楼层
andb 1bh,#7fh;ah=jie_ma2
jbc 1bh,6,mlk1
orb 1bh,#80h
;*************
mlk1:
ldb bh,[28h]+
ldb bl,[28h]+
ldb ah,[28h]+
ldb al,[28h]+
ldb 1ah,24h
call mul1 ;1ah=jie_ma;2ch_2fh=wei_shu
;******************
pop 26h
btofend:
jmp mov0
pa26h:
andb 26h,1ah,#80h;26h.7=jie_ma1
andb 1ah,#7fh;ji_ma to cl
jbc 1ah,6,btf2
orb 1ah,#80h
btf2:
ret
pa27h:
andb 27h,1bh,#80h;26h.7=jie_ma1
andb 1bh,#7fh;ji_ma to cl
jbc 1bh,6,btf112
orb 1bh,#80h
btf112:
ret
;***************
;use ax-dx,24h-29h
;out=dx,cx=fu(2)
;in=bx,ax
dottobin:
ld 24h,#32
clr dx
clr cx
dot1:
shll ax,#1
addc cx,cx
addc dx,dx
ld 26h,#ax
call intbcd
ldb cl,2dh
decb 24h
jbc dh,7,dot1
;*** 0.5 add
jbc bh,7,dot2
add cx,#01
addc dx,#0
jnc dot2
ld dx,#8000h
inc 24h
dot2:
ret
;**************************
intbcd:
ldb 25h,#04
ldb 2ch,[26h];use 2ch,2dh
int0:
ldb 2dh,1[26h]
add 2ch,#66h
jbs 2ch,4,int1
subb 2ch,#06
int1:
jbs 2dh,0,int2
subb 2ch,#60h
int2:
stb 2ch,[26h]+
stb 2dh,2ch
djnz 25h,int0
ret
;*********************
; 2fh,2eh,2dh,2ch,2bh,2ah,29h,28h
; 27h,26h,25h,24h,dx,cx,bx,ax,1bh,1ah
;[bxax]=a1;[dxcx]=a2
;2fh~28h=a1*a2 a1/a2
;bxax*dxcx
mul1:
ld 28h,ax
or 28h,bx
je mul61
ld 28h,dx
or 28h,cx
je mul61
mulu 28h,ax,cx
mulu 2ch,bx,cx
add 2ah,2ch
addc 2eh,#0
clr 28h;;2002.6.30
push 2eh
mulu 2ch,ax,dx
add 2ah,2ch
addc 2eh,[sp]+
addcb 28h,#0
push 2eh
mulu 2ch,bx,dx
add 2ch,[sp]+
addc 2eh,28h
;*********** 2fh~28h
jbs 2fh,7,mul2
shll 28h,#1
call rl1
sjmp mul3
mul2:
jbc 2bh,7,mul3
add 2ch,#01
addc 2eh,#0
mul3:
addb 1ah,1bh
md:
jbs 1ah,7,mul4
jbc 1ah,6,mul6
;*** over
;1ah=3fh
ldb 1ah,#3fh
setc
ret
mul4:
jbs 1ah,6,mul6
mul61:
call movzer
mul6:
clrc
ret
;************* ab/cd
;ab<cd=[2bh~28h];2fh~2ch=temp
;24h=cy
;*****************
div3:
cmp dx,bx
jh div4
je div31
sjmp div32
div31:
cmp cx,ax
jh div4
div32:
clrc
;****
ld 2ch,ax
ld 2eh,bx
call rDX
ld ax,2ch
ld bx,2eh
sjmp div3
div4:
clr 2ah
clr 28h
clr 24h
clr 2ch
clr 2eh
ldb 25h,#32
div43:
clrc
shll 2ch,#1
shll ax,#1
ldb 24h,#0
addcb 24h,#0
sub 28h,ax,cx;ax-cx=>2ch
ld 2ah,bx ;** mov
subc 2ah,dx;bx-dx=>2eh
jbc 24h,0,div41
div42:
ld ax,28h
ld bx,2ah
incb 2ch
sjmp div44
div41:
jc div42
;*** not to sub
div44:
djnz 25h,div43
;****
shr dx,#1
sub bx,dx ;dx/2-bx> not +1
;*** inc 28h
addc 28h,#0
addc 2ah,#0
subb 1ah,1bh
call md
jmp rln
;***************
;2fh,2eh,2dh,2ch
;***************
rl1:
addc 2ch,2ch
addc 2eh,2eh
;***
decb 1ah
cmpb 1ah,#0c0h
jgt rl2
orb 26h,#0c1h
ldb 1ah,26h
clr 2ch
clr 2eh
rl2:
ret
;*********************
rDX:
shrl 2ch,#01 ;2ch--->1
incb 1ah
cmpb 1ah,#040h
jlt rr2
orb 26h,#3fh
ldb 1ah,26h
rr2:
ret
;***************
rln:
ld ax,2ch
or ax,2eh
jne rln1
;*** =0
orb 26h,#0c1h
ldb 1ah,26h
ret
rln1:
jbs 2fh,7,rln2
call rl1
sjmp rln
rln2:
ret
BTFL:
DB 41H,0ECH,01EH,04ah,00dh;10e-19
DB 45H,093H,092H,0eeh,08eh;10e-18
DB 48H,0B8H,077H,0aah,032h;10e-17
DB 4BH,0E6H,095H,094h,0beh;10e-16
DB 4FH,090H,01DH,07ch,0f7h;10e-15
DB 52H,0B4H,024H,0dch,035h;10e-14
DB 55H,0E1H,02EH,013h,042h;10e-13
DB 59H,08CH,0BcH,0cch,009h;10e-12
DB 5CH,0AFH,0EbH,0ffh,00bh;10e-11
DB 5FH,0DBH,0E6H,0feh,0ceh;10e-10
DB 63H,089H,070H,05fh,041h;10e-9
DB 66H,0ABH,0CCH,077h,011h;10e-8
DB 69H,0D6H,0bfH,094h,0d6h;10e-7
BFLN:
DB 6DH,086H,037H,0bdh,005h;10e-6
DB 70H,0A7H,0C5H,0ach,047h;10e-5
DB 73H,0D1H,0B7H,017h,059h;10e-4
DB 77H,083H,012H,06eh,097h;10e-3
DB 7AH,0A3H,0D7H,00ah,003d;10e-2
DB 7DH,0CCH,0CcH,0CCH,0cdh;10e-1
BFL0:
DB 01h,080H,000H,000h,000h;10e0
DB 04h,0A0H,000H,000h,000h;10e1
DB 07h,0C8H,000H,000h,000h;10e2
DB 0AH,0FAH,000H,000h,000h;10e3
DB 0EH,09CH,040H,000h,000h;10e4
DB 11H,0C3H,050H,000h,000h;10e5
DB 14H,0F4H,024H,000h,000h;10e6
DB 18H,098H,096H,080h,000h;10e7
DB 1BH,0BEH,0BCH,020h,000h;10e8
DB 1EH,0EEH,06BH,028h,000h;10e9
DB 22H,095H,002H,0f9h,000h;10e10
DB 25H,0BAH,043H,0b7h,040h;10e11
DB 28H,0E8H,0D4h,0a5h,010h;10e12
DB 2CH,091H,084H,0e7h,02ah;10e13
DB 2FH,0B5H,0E6H,020h,0f5h;10e14
DB 32H,0E3H,05fH,0a9h,032h;10e15
DB 36H,08EH,01bH,0c9h,0bfh;10e16
DB 39H,0b1H,0A2H,0bch,02eh;10e17
DB 3CH,0DEH,00BH,06bh,03ah;10e18
DB 40H,08AH,0c7H,023h,005h;10e19
(7)标号: DTOF 功能:四字节十六进制定点数转换成格式化浮点数
入口条件:四字节定点数的绝对值在[CX]中,数符在位26H的D7上,整数部分的位数在AL中。
出口信息:转换成格式化浮点数在[CX]中(四字节)。
dtof:
push cx
ldb 1ah,al;al=wei shu max=32
ldb 2fh,[cx]
ldb 2eh,1[cx]
ldb 2dh,2[cx]
ldb 2ch,3[cx]
call rln
jmp mov0
|
|