汇编 浮点数运算

作者&投稿:束艳 (若有异议请与网页底部的电邮联系)
汇编中浮点数的运算~

我写过一个定点整数( -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
打字不易,如满意,望采纳。

建议看一下东北大学出版社齐志儒编写的《汇编语言程序设计》那本书,里面专门讲了这部分内容,很全面。

我写过一个定点整数( -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
用图更容易理解不过不会上传!


枣强县19427535552: 汇编浮点运算 -
柳依寒湿: 汇编语言的指令 fild是一种计算机处理器指令~ fild和fstp都是x87指令 fild是将整数转化为长双精FP80压栈(压到st0) fstp是将弹栈指令,将st0弹出.

枣强县19427535552: 51单片机用汇编语言怎么处理浮点数?比如做除法之后的得数,这个得数之后要再进行计算. -
柳依寒湿: 把小数乘以一定的值转换为整数,完成运算后再除以那个值还原原来的数,就是这样.直接用汇编写浮点数的运算,难度太大了,这样的话用C语言写好一些.

枣强县19427535552: 汇编语言 浮点数表示方法
柳依寒湿: 先把36.625和-36.625转换成二进制 分别为:+100100.101和-100100.101 写成1.00100101*(2的5次幂)和-1.00100101*(2的5次幂) 因为32位的浮点数国际标准: 第一位为符号位用S表示,接着的八位为阶码用E表示,后面的23位为尾数用M表示 ...

枣强县19427535552: 51单片机怎么实现浮点运算 -
柳依寒湿: 要先按装浮点库C51FPS.LIB,按装路径为:将 C51FPS.LIB 文件复制到 C:\Keil\C51\LIB\ 文件夹下面.而后在程序中用浮点型变量float或double进行运算即可.

枣强县19427535552: 对于小数的运算c语言可以用浮点运算,那汇编语言如何进行小数运算? -
柳依寒湿: 汇编有浮点运算的指令 st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响 src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数 mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值...

枣强县19427535552: 如何用汇编语言实现浮点运算?
柳依寒湿: 请把问题说清楚,比如1、你的汇编语言能做什么样的运算2、你要实现那种浮点运算,加法?乘法?除法?还是所有?

枣强县19427535552: 汇编语言中386指令fild fmul fistp是什么意思啊 是怎么用的 -
柳依寒湿: 浮点数的计算,fmul 是两个浮点数相乘 因为浮点数计算不是在普通寄存器中进行.而是采用特殊的堆栈结构.其他那两个都是操作堆栈的,不懂的话可以查一下汇编的数书.

枣强县19427535552: 反汇编看到fld[ecx]谁能告诉我 fld是什么命令? -
柳依寒湿: 浮点数运算指令: fild:m16i/m32i/m64i;取存储器的整数,压入栈顶ST(0). FLD:M32R/M64R/M80R/ST(I);取存储器或ST(I)中的浮点数,压入栈顶. FADD:M32R/M64R;ST(0)--ST(0)+32R/M64R. FADD:ST,ST(I);ST(0)--ST(0)+ST(0). FADD:...

枣强县19427535552: cpu浮点运算是什么? -
柳依寒湿: 1、浮点性能,以前称之为协处理器,486以前并不包含在CPU中(8086~8087,80286~80287,80386~80387=80386DX,80486SX~80487=80486DX,586=586+587……)浮点运算是高精度的运算方式,主要运用在科学和多媒体中.2、可以理解...

枣强县19427535552: CPU里的浮点运算是什么意思? -
柳依寒湿: 如果你想详细地搞清以上问题,建议你去阅读有关386、486或Pentium汇编的书(8086/8088的汇编的书一般没有保护方式、虚拟地址、浮点数等概念),一般都会有专门的部分来讨论这些问题,因为要想准确地知道这些问题,还真需要花一些...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网