如何才能将除法转换为乘法?

zhangze 2004-07-02 12:02:56
在nokia的手机芯片arm芯片中没有除法指令,如果程序中要使用除法的话,怎么才能将除法转换为乘法然后运算
...全文
1061 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangze 2004-07-06
  • 打赏
  • 举报
回复
/2之类的事情改为移位,其他的/5,可以让他乘以13107,然后将结果〉〉16位可以得到近似的值。对于不固定的,nokia调用了他的一个除法的函数,说不定就是 W32API() 的算法
W32API 2004-07-05
  • 打赏
  • 举报
回复
你是指 /2 转换为 *0.5 ?
zhangze 2004-07-05
  • 打赏
  • 举报
回复
如果基于固定的数值,我可以将它转换为定点的小数,然后用乘法,但对于不固定的.我没有办法了........
Areslee 2004-07-04
  • 打赏
  • 举报
回复
在没有除法的环境下移位是唯一的办法啊
PS:偶也很想做一下ARM的东西,羡慕中
W32API 2004-07-04
  • 打赏
  • 举报
回复
哦,看你在易水的帖子里面留了个 如果基于 ARM 就更好了,我还以为你的 ARM 系统的图形部分采用 PC 的方式。(公告的那个东东里面)

至于用乘法去做,这个我没做过,一般我用的带乘法的都会同时支持除法,要么就是都没有,所以我只用移位加减来实现乘除法运算,运算宽度可以自己定义,也可以做一定优化。。。

数字求反应该是逻辑指令,所谓的减法也是基于减数求反后再加
zhangze 2004-07-04
  • 打赏
  • 举报
回复
W32API(李诚) ( )
,为什么你会要求 AresLee 的 PC 图形库都要支持 arm 的版本?你用 arm 做的图形操作使用 VESA 规范????????
我不明白什么意思,我没有听说过AresLee 的 PC 图形库的东东。
我目前在写一个nokia的symbian系统的图像引擎,nokia的symbian操作系统采用arm芯片,没有除法指令,没有浮点协处理器。但nokia的一篇关于3d引擎的文档中说了这样一句话:
除非真正需要,不使用除法。请用数字求反后的乘法来代替除法。
对一个数字求反,不久转换为浮点了吗?arm芯片没有浮点协处理器,而且外面还有一个乘法运算。我不知道这样的转换对于直接除在效率上的提高,我感觉效率比直接除还要低,因为毕竟有一个除法运算,还有一个乘法运算。。。。。。
对于移位减法,效率上并不能令我非常的满意,因为循环运算。。。。
W32API 2004-07-03
  • 打赏
  • 举报
回复
zhangze(喆)

8086 的 16bit 寄存器用移位减实现除法运算。。。相信你转换成 arm 的代码不难。。。

我还想请教你的是,为什么你会要求 AresLee 的 PC 图形库都要支持 arm 的版本?你用 arm 做的图形操作使用 VESA 规范?我没做过手机的先说。。。
W32API 2004-07-03
  • 打赏
  • 举报
回复
; input parameter
; dx: dividend, bx: divisor
; output parameter
; ax: quotient, dx: remainder

xor ax,ax
mov cx,10h
loop1:
shl dx,1 ; cf from MSB(dx)
rcl ax,1 ; LSB(ax) from cf
cmp ax,bx
jl next
sub ax,bx
inc dx ; quotient
next:
loop loop1 ; next bit
xchg ax,dx
W32API 2004-07-03
  • 打赏
  • 举报
回复
; input parameter
; dx: dividend, bx: divisor
; output parameter
; ax: quotient, dx: remainder

xor ax,ax
mov cx,10h
loop1:
shl dx,1 ; cf from MSB(dx)
rcl ax,1 ; LSB(ax) from cf
cmp ax,bx
jl next
sub ax,bx
inc dx ; quotient
loop loop1 ; next bit
xchg ax,dx
fly4free 2004-07-03
  • 打赏
  • 举报
回复
《程序员教程》第一章就有相关讲解。
zhangze 2004-07-03
  • 打赏
  • 举报
回复
比如a/10如何转换呢,对于a/b这种类型的通过移位怎么做
snowegale888 2004-07-02
  • 打赏
  • 举报
回复
通过移位指令实现
tianxiangyuan 2004-07-02
  • 打赏
  • 举报
回复
通过移位指令实现
W32API 2004-07-02
  • 打赏
  • 举报
回复
不太可能。。。转换为减法去做还是很正常的

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧