席绢作品集及作品简介:汇编 浮点数运算

来源:百度文库 编辑:中科新闻网 时间:2024/05/03 08:57:48
浮点数运算 采用IEEE32位浮点格式 求0.97702828142+0.97570213004=? 对于小数位如何转换为二进制?最好写出程序来!!!

我写过一个定点整数( -2147483648<x<2147483647 )的ASCII码串转换为浮点数的程序。
对于小数的转换可以先把它看成整数,转换后,再跟据小数的位数n,除以10的n次幂。

定点整数的ASCII码串转换为浮点数的完整程序:
;定点整数的ASCII码串转换为浮点数
.386
code segment use16
assume cs:code,ds:code

comment#
(1)子程序名:datof
(2)子程序功能:将定点整数( -2147483648<x<2147483647 )的ASCII码串转换为浮点数
(3)入口条件:ASCII码串首址在SI中;ASCII码串以非十进制数字结束;
(4)出口条件:EAX中为转换结果值;DL中为字符串终止字符;SI指向终止字符;
(5)受影响的寄存器:EAX,EDX,SI,Flags.#
datof proc
mov dl,[si]
xor eax,eax
cmp dl,'-'
jz minus
cmp dl,'+'
jz plus
clc
pushf
convert:
mov dl,[si]
cmp dl,'0'
jb return
cmp dl,'9'
ja return
sub dl,'0'
movzx edx,dl
imul eax,10
add eax,edx
inc si
jmp convert
minus:
stc
pushf
jmp sign
plus:
clc
pushf
sign:
inc si
jmp convert
return:
bsr ecx,eax
jz return2
;mov bl,cl
ror eax,cl
add cl,127
popf
rcr cl,1
rcr eax,1
mov al,cl
ror eax,8
ret
return2:
popf
ret
datof endp

;数据
dasc db '123,+34,-888,2147483647,-2147483648,'
db '-5,+8,-99,4294967294,0',0dh
bin dd 0,123.0,0,34.0,0,-888.0,0,2147483647.0,0,-2147483648.0
dd 0,-5.0,0,8.0,0,-99.0,0,4294967294.0,0

;入口
start:
mov ax,cs
mov ds,ax
lea si,dasc
lea di,bin
@@:
call datof
mov [di],eax
inc si
add di,8
cmp dl,0dh
jnz @b
dd 21cd4cb4h
code ends
end start

乘2取整法!用循环可实现任意无损精度!
即乘2取整法,位数取决于要求精度.如:
(0.613)10 2=1.226 k-1=1
(0.226)10 2=0.452 k-2=0
(0.452)10 2=0.904 k-3=0
(0.904)10 2=1.808 k-4=1 (0. 1001)2 =(0. 5625)10
(0.808)10 2=1.616 k-5=1 (0.10011)2=(0. 609375)10
(0.616)10 2=1.232 k-6=1
(0.613)10=(0.1001)2 k-7=0
用图更容易理解不过不会上传!