首页
社区
课程
招聘
8086汇编,定点小数除法问题
发表于: 2009-11-20 18:00 6062

8086汇编,定点小数除法问题

2009-11-20 18:00
6062
最近在用8086汇编,尝试编辑一个支持带小数的混合运算的计算器。
    现在碰到个挺麻烦的问题,8086只有16位,也就是数只能在0~65535。而现在,我想把它扩充出小数。方法是利用两个16位,一个存整数部分a,一个存小数部分b。小数部分自己来判断满1000就给它进位,因为这样方便输出,同时也就是3位定点小数,支持0.000~65535.999。
    ‘+’:加法,可以整数加整数,小数加小数,再进个位就可以。
    ‘-’: 减法,与加法大同小异
    ‘*’:乘法,利用乘法分配率(a1+b1)*(a2+b2)=a1*a2+a1*b2+b1*a2+b1*b2
    ‘/’:  除法, 想了很久,不知道怎么解决了。望大虾们给个建议
能实现65500.453/3456.456这样的除法。
先谢过了。

PS 版主别说我一贴多投,另外个新生交流区没人回复我呢,5555

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
伤心了,没人理呢,
至少留个言,给点建议什么的。
2009-11-20 23:24
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这么费劲,还不如用浮点运算得了
2009-11-20 23:50
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
8086支持浮点运算吗?
PS:我坚信,这个问题肯定是可以解决的....
2009-11-21 01:23
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
LZ的问题我也学习学习
根据你的3个例子。意思是16位的进行+-×/那么除法也把它分解
成单个单个相除不就可以了 我的公式是这样的 不知道能否解决你的
问题。
a1+b1/a2+b2 上下都乘以1/b2就得到

(a1/b2+b1/b2)/(a2/b2+1)  这样就是16位和16位的除法了

不知道能不能解决你的问题   关注ing
2009-11-21 09:13
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哦 第一个式子冒失写错了 该市(a1+b1)/(a2+b2)
2009-11-21 09:15
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
^_^,简单不错了方法,谢了。我去实践实践,

ps:
为什么我自己就没想到呢?
对不起供我上大学的爹娘啊,
2009-11-21 12:48
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不行哦,细想了一下。a1/b2和b1/b2是两个不一样的数量级,无法相加到一个16位寄存器里,同样a2/b2 + 1 两个也不是一样的量级。这样依旧仍然还是像原来的一样,只不过变成了(c1+d1)/(c2+d2)这样。

2009-11-21 13:00
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
数量级是不同啊  但是你可以换算啊你的(a1+b1)*(a2+b2)=a1*a2+a1*b2+b1*a2+b1*b2
也是数量级不同啊。但是你的 b1,b2应该是小于1000的整数啊 表示小数就是  b1/1000 b2/1000
对不啊。这个才符合你的设计社  所以你的乘法应该是  a1*a2+b2*a1/1000+b1*a2/1000+b1*b2/1000000    应该是这样才对吧
同理  (a1*1000/b2+b1/b2)/((1000*a2)/b2+1)  也就是 你的b1 b2都应该除以1000  
比如  12.5/2.5  就该是 a1=12 b1=500 a2=2 b2=500
套公式就是  (12×1000/500+500/500)/(2×1000/500+1) =   25 /5  = 5
结果是5  不过我仔细考虑了  你这样设计要提防溢出带来的问题和比如不能整除的问题  比如 125/35 不能得到
精确度结果很可能造成误差  所以你就用这个公司套上然后在试试结果吧  可能inter后来不是这样设计的你去
问问别人吧
2009-11-21 22:32
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
可是a1*1000后就很容易溢出了。8086中AX的范围是0~65535,它没有EAX这种32位的寄存器呢。
谢谢tigerlhp的帮忙,也许还是非得用减法来算除法了,汗
2009-11-21 23:52
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
^_^,自己解决了,通过减法完成除法。
程序也编成了,有空加上注释,分享给大家,(*^__^*) 嘻嘻……
2009-11-23 18:44
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
  恭喜恭喜  以前读书没认真 现在后悔莫及

怎么用减法做的。分享个啊 呵呵
2009-11-25 23:08
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习学习,我也在努力
2009-11-26 12:02
0
游客
登录 | 注册 方可回帖
返回
//