关于51单片机双字节(带有小数)无符号除法的问题

题目:在51单片机里,有两个16位(每个16位数是由两个字节组成)无符号数相除,结果放在30H、31H。
例如:由R0、R1组成被除数,R2、R3组成除数,被除数的数值为500,除数的数值为1300,即“500/1300=0.3846”。
在计算结果中,小数点后面最少要有3位数(最好是4位),由于是刚入门,最好能给个汇编程序例子,小妹万分感谢!
悬赏分:20 - 解决时间:2010-7-21 01:19
;==================================
最佳答案:
关于带有小数的运算,最简单的方法是:把它们都变换成整数来进行。
就是先把“R0、R1组成被除数”,乘以10000,即为:500*10000;
再用它除以“R2、R3组成除数”,得到:3846,显示的时候,再加上小数点即可。
四个字节除以三个字节的程序,在我的空间里面有。
比较麻烦的方法是:先学习C语言,再......。
-----------------------------
问题补充:谢谢“做而论道”大哥!我试了一下,相乘的结果在65536以内是没有问题的,但500*10000结果已经超出65536,结果出错,再次请教您一下,如何计算出3846这个结果呢?谢谢!

回答补充提问:
500*10000,应该采用16位数乘以16位数、等于32位数(4个字节)的乘法程序。
这样,乘积虽然超过了65536,但是不会超过4个字节,所以不会出错。
除以“R2、R3组成除数”,可以采用“四个字节除以三个字节的程序”,正确得出3846,肯定是没有问题的。
这样的问题,我做过多次,都是成功的。
;==================================
回答者: 做而论道 - 十三级   2010-7-20 22:58
提问者对于答案的评价:用“万分感激”都无法表达我对“做而论道”大哥的解答!在您的帮助下,问题解决啦!爱死你啦!再次感谢!
原题网址:http://zhidao.baidu.com/question/168265184.html
************************************************************************
下面是另外一个问题。
************************************************************************
关于51单片机的数值计算问题
帮忙编写程序计算这个式子:X/20.9 = U/100000000。
其中“X”为未知数,“U”代表51单片机即时采集的二进制数据变量,“100000000”为二进制常数,“20.9”为十进制常数。
要求计算结果为三位十进制数(两位整数,一位小数),程序采用51单片机汇编语言设计。谢谢!
悬赏分:30 - 解决时间:2010-8-2 12:26
;==================================
最佳答案:
U,是多少位二进制数字?

问题补充:U是八位二进制数。
-------------------------
U是八位二进制数,就简单了。程序如下:
    MOV  A, U
    MOV  B, #209
    MUL  AB       ;乘以209,可以方便以后的计算.
                  ;乘积为16位。再除以256(即100000000),右移8位即可.
                  ;商就是剩下在B中的8位数了.
    MOV  A, B
    MOV  B, #10
    DIV   AB       ;除以10,余数就是“一位小数”.
    MOV  R2, B    ;保存小数.
    MOV  B, #10
    DIV   AB       ;再除以10,余数就是“个位数”.
    MOV  R1, B    ;保存个位数.
    MOV  R0, A    ;保存十位数.

;完
结果的“两位整数,一位小数”,分别存在 R0, R1, R2 中。
;==================================
回答者: 做而论道 - 十四级   2010-8-2 10:41
提问者对于答案的评价:非常感谢!多给你点分。
原题网址:http://zhidao.baidu.com/question/171453425.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值