打印

汇编浮点运算的错误

[复制链接]
902|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小小子他爹|  楼主 | 2017-7-8 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
xinxi| | 2017-7-8 22:00 | 只看该作者
用c写一个浮点加法公式,仿真 查看汇编。 然后拷贝出汇编子程序

使用特权

评论回复
板凳
chunyang| | 2017-7-8 23:04 | 只看该作者
算的不对,那只能说程序有问题,仅此。

使用特权

评论回复
地板
mcu5i51| | 2017-7-9 15:52 | 只看该作者
应该是多少呢

使用特权

评论回复
5
tyw| | 2017-7-9 22:53 | 只看该作者
本帖最后由 tyw 于 2017-7-9 22:54 编辑

〓◆ 浮点数转换相关资料专辑 66册 101M ◆〓

里面有几个浮点数工具很有用.

使用特权

评论回复
6
linqing171| | 2017-7-10 10:20 | 只看该作者
贴出你的程序来。感觉是浮点数归一化移位的时候的问题。

使用特权

评论回复
7
小小子他爹|  楼主 | 2017-7-18 23:09 | 只看该作者
tyw 发表于 2017-7-9 22:53
〓◆ 浮点数转换相关资料专辑 66册 101M ◆〓

里面有几个浮点数工具很有用.

谢谢,挺实用的资料

使用特权

评论回复
8
小小子他爹|  楼主 | 2017-7-24 23:12 | 只看该作者
linqing171 发表于 2017-7-10 10:20
贴出你的程序来。感觉是浮点数归一化移位的时候的问题。

“MCS-51浮点运算子程序库及其使用说明”用百度可以搜到这个例程,我就是从里面用的,其他的乘除法没有问题。1732+136 1732阶码 是4  136的阶码是3,应该得1868,实际却是 1745,阶码是4(阶码应该没错),不知道是哪里的错误?

使用特权

评论回复
9
小小子他爹|  楼主 | 2017-7-25 09:43 | 只看该作者
linqing171 发表于 2017-7-10 10:20
贴出你的程序来。感觉是浮点数归一化移位的时候的问题。

                       als1=0x136;
                       AN1=0x1732;
                         pj0=0x39;
                        *pj0=jm;        //阶码 =3            
                         p1=0x3a;   //查看高低位在哪个寄存器中,别错。
                        *p1=als1;                   
                        pj0=0x33;
                        *pj0=jma2;        //阶码=4            
                        p1=0x34;   
                        *p1=AN1;       
                    MFAD();
                    AN1=FTB6();          
                  jma2=ftbjm();  
=========================
MFAD:  MOV R0,#39H;         
       MOV A,@R0
       MOV @R0,A
       INC R0  
           MOV A,@R0
       MOV @R0,A
       INC R0
           MOV A,@R0
       MOV @R0,A
       DEC R0
       DEC R0
       LCALL BTOF
       MOV R0,#33H;
      MOV A,@R0
       MOV @R0,A
       INC R0
       MOV A,@R0
       MOV @R0,A
       INC R0
       MOV A,@R0
       MOV @R0,A
       DEC R0
       DEC R0
       LCALL BTOF ;        ;将其转换成二进制浮点操作数
           MOV R0,#33H
       MOV R1,#39H;;指向二进制浮点操作数
LCALL FADD ;;进行浮点加法运算               
LCALL FTOB ;;将结果转换成BCD码浮点数          
       RET
其他部分与“MCS-51浮点运算子程序库及其使用说明”一样的

使用特权

评论回复
10
linqing171| | 2017-7-25 14:18 | 只看该作者
大哥,佩服啊,2+1的非标浮点数。 我读书的时候也用这种汇编库。包括C++后来的双字节半浮点数_half,那点效率太容易出问题了。

你知不知道C51里面有个关键字叫 float, 直接用float类型IEEE745标准的3+1的浮点库? x * 2^y  ,x的最高位必须归一化成1,然后省掉,剩下的为小数部分。 比如 1.0的float表示为 0x3F800000 .

你直接定义两个变量在 33 34 35,39 3A 3B,你问过你的链接器没有?查过map文件没有?

而且还是BCD格式,怎么看怎么像1980s 的代码库  ... ...

然后翻了眼程序(没有仔细看) =1732*10000+136*1000 =  17456000 =1745*10^4  似乎也没有错误。

如果都是整数,就别整浮点了。浮点就是个坑,C#的decimal就比较合理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

53

帖子

0

粉丝