如何实现除法运算

0uhuang 2005-02-23 09:04:01
Arm平台里的,只有+ - * 没有除法运算,请问如何实现一个10bit的数除以一个32bit的。
谢谢。
...全文
1014 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
copygirl 2005-02-24
  • 打赏
  • 举报
回复
不过,如果是得到整除数/,用减法很好实现;如果是要求得到小数,那就麻烦了。
bzCpp 2005-02-24
  • 打赏
  • 举报
回复
你用C写个程序,然后反汇编一下不就看到了吗?

抄 ADS12上的:

__rt_sdiv [0xe2102480] ands r2,r0,#0x80000000
00008140 [0x42600000] rsbmi r0,r0,#0
00008144 [0xe0323041] eors r3,r2,r1,asr #32
00008148 [0x22611000] rsbcs r1,r1,#0
0000814c [0xe070c1a1] rsbs r12,r0,r1,lsr #3
00008150 [0x3a000020] bcc 0x81d8 ; (__rt_sdiv + 0x9c)
00008154 [0xe070c421] rsbs r12,r0,r1,lsr #8
00008158 [0x3a00000f] bcc 0x819c ; (__rt_sdiv + 0x60)
0000815c [0xe1a00400] mov r0,r0,lsl #8
00008160 [0xe38224ff] orr r2,r2,#0xff000000
00008164 [0xe070c221] rsbs r12,r0,r1,lsr #4
00008168 [0x3a000017] bcc 0x81cc ; (__rt_sdiv + 0x90)
0000816c [0xe070c421] rsbs r12,r0,r1,lsr #8
00008170 [0x3a000009] bcc 0x819c ; (__rt_sdiv + 0x60)
00008174 [0xe1a00400] mov r0,r0,lsl #8
00008178 [0xe38228ff] orr r2,r2,#0xff0000
0000817c [0xe070c421] rsbs r12,r0,r1,lsr #8
00008180 [0x21a00400] movcs r0,r0,lsl #8
00008184 [0x23822cff] orrcs r2,r2,#0xff00
00008188 [0xe070c221] rsbs r12,r0,r1,lsr #4
0000818c [0x3a00000e] bcc 0x81cc ; (__rt_sdiv + 0x90)
00008190 [0xe270c000] rsbs r12,r0,#0
00008194 [0x2a000383] bcs __rt_div0
00008198 [0x21a00420] movcs r0,r0,lsr #8
0000819c [0xe070c3a1] rsbs r12,r0,r1,lsr #7
000081a0 [0x20411380] subcs r1,r1,r0,lsl #7
000081a4 [0xe0a22002] adc r2,r2,r2
000081a8 [0xe070c321] rsbs r12,r0,r1,lsr #6
000081ac [0x20411300] subcs r1,r1,r0,lsl #6
000081b0 [0xe0a22002] adc r2,r2,r2
000081b4 [0xe070c2a1] rsbs r12,r0,r1,lsr #5
000081b8 [0x20411280] subcs r1,r1,r0,lsl #5
000081bc [0xe0a22002] adc r2,r2,r2
000081c0 [0xe070c221] rsbs r12,r0,r1,lsr #4
000081c4 [0x20411200] subcs r1,r1,r0,lsl #4
000081c8 [0xe0a22002] adc r2,r2,r2
000081cc [0xe070c1a1] rsbs r12,r0,r1,lsr #3
000081d0 [0x20411180] subcs r1,r1,r0,lsl #3
000081d4 [0xe0a22002] adc r2,r2,r2
000081d8 [0xe070c121] rsbs r12,r0,r1,lsr #2
000081dc [0x20411100] subcs r1,r1,r0,lsl #2
000081e0 [0xe0a22002] adc r2,r2,r2
000081e4 [0xe070c0a1] rsbs r12,r0,r1,lsr #1
000081e8 [0x20411080] subcs r1,r1,r0,lsl #1
000081ec [0xe0a22002] adc r2,r2,r2
000081f0 [0xe070c001] rsbs r12,r0,r1
000081f4 [0x20411000] subcs r1,r1,r0
000081f8 [0xe0b22002] adcs r2,r2,r2
000081fc [0x2affffe5] bcs 0x8198 ; (__rt_sdiv + 0x5c)
fishstudio 2005-02-24
  • 打赏
  • 举报
回复
偷懒的做法,把除数取倒数,然后用乘法。

倒数取法应该是个函数。
hudou_k 2005-02-24
  • 打赏
  • 举报
回复
在<<计算机组成原理>>中有袢细的计算过程
ringking007 2005-02-24
  • 打赏
  • 举报
回复
不好意思,漏了个等于

设a,b两个数..现要求a/b,商为c,余数为d
可以这样:
c=0,d=0;
while(a>=b)
{
c++;
a=a-b;
}
d=a;
ringking007 2005-02-24
  • 打赏
  • 举报
回复
设a,b两个数..现要求a/b,商为c,余数为d
可以这样:
c=0,d=0;
while(a>b)
{
c++;
a=a-b;
}
d=a;
ringking007 2005-02-24
  • 打赏
  • 举报
回复
应该用位移吧
0uhuang 2005-02-24
  • 打赏
  • 举报
回复
谢谢各位大侠。
结贴了。
seedundersnow 2005-02-23
  • 打赏
  • 举报
回复
通常用汇编语言做一个函数。

你应当能够得到合适的库的。
seedundersnow 2005-02-23
  • 打赏
  • 举报
回复
比较,如果被除数不小于除数就相减,移位,循环直到最后一个bit。
wabadan 2005-02-23
  • 打赏
  • 举报
回复
有减法来代替除法啊
0uhuang 2005-02-23
  • 打赏
  • 举报
回复
关键是
int a,b;
?a/b 而我又不知道b是多大,要移动几位,还要不要在减去什么数。
头痛ing
EnochShen 2005-02-23
  • 打赏
  • 举报
回复
位移
0uhuang 2005-02-23
  • 打赏
  • 举报
回复
退而求其次:
在C里面如何实现除法运算呢?当然不用 “/”。
0uhuang 2005-02-23
  • 打赏
  • 举报
回复
别人问的
我不懂,只好在CSDN上学了再回去炫耀。
呵呵

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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