请问 PIC执行8*8的乘法需要多长时间?

[复制链接]
3782|14
 楼主| zhaohe2001 发表于 2008-10-9 15:42 | 显示全部楼层 |阅读模式
 楼主| zhaohe2001 发表于 2008-10-9 15:44 | 显示全部楼层

我自己写了一个

程序空间占用44Word<br />最长计算时间要80us
yewuyi 发表于 2008-10-9 16:09 | 显示全部楼层

需要看是哪个芯片

有的有硬件乘法器,有的没有,代码和速度也不一样
 楼主| zhaohe2001 发表于 2008-10-9 16:36 | 显示全部楼层

我用的是16F系列PIC

  
yewuyi 发表于 2008-10-9 20:05 | 显示全部楼层

16系列没有硬件乘法器,

乘法是用的累加实现的,具体的执行时间和累加的次数有关,你可以执行255*255看看最大时间
 楼主| zhaohe2001 发表于 2008-10-9 20:42 | 显示全部楼层

PICC乘法是用移位来算的吧

不是累加。我自己写的也是用的移位,但不知道是不是比PICC的乘法快
su_mj000 发表于 2008-10-9 23:18 | 显示全部楼层

只需11条指令就够了

_mul8::<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bsf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4,&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;_$$-2<br />L4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3,&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btfsc&nbsp;&nbsp;&nbsp;_$$-1,&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addwf&nbsp;&nbsp;&nbsp;_$$-2,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_$$-2,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_$$-1,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;4,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;L4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br /><br />
谈的元 发表于 2008-10-9 23:37 | 显示全部楼层

$$什么意思约?

  
 楼主| zhaohe2001 发表于 2008-10-10 08:58 | 显示全部楼层

su_mj000 的程序挺巧妙!

呵呵,比我的要简单,收下了,谢谢!<br />不过定义的&nbsp;$$符号有点特别。建议改一下
su_mj000 发表于 2008-10-10 10:03 | 显示全部楼层

"_$$"是特殊符号

&quot;_$$&quot;是我的汇编器(assembler)所识别的特殊符号。它位于内存的高端区域(即0x70~0x7F空间)。该子程序实现两个8位有符号或无符号数的乘法。若两个乘数均为<br />无符号数的话,‘_$$-2’和‘_$$-1’内的结果即是16位乘积。倘若只需得到8位的乘积,<br />&quot;&nbsp;bcf&nbsp;&nbsp;3,&nbsp;0&quot;可以省略。顺便附上该子程序的C语言形式:<br /><br />void&nbsp;_mul8&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FSR&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;FSR&nbsp;|=&nbsp;1&nbsp;&lt&lt&nbsp;3;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;cnt&nbsp;=&nbsp;8<br />&nbsp;&nbsp;&nbsp;&nbsp;asm&nbsp;(&quot;clrf&nbsp;&nbsp;&nbsp;&nbsp;_$acc1$&quot;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_C&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm&nbsp;(&quot;btfsc&nbsp;&nbsp;&nbsp;_$acc0$,&nbsp;0&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm&nbsp;(&quot;addwf&nbsp;&nbsp;&nbsp;_$acc1$,&nbsp;F&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm&nbsp;(&quot;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_$acc1$,&nbsp;F&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm&nbsp;(&quot;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_$acc0$,&nbsp;F&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;while&nbsp;(&nbsp;--FSR&nbsp;);<br />}<br />
jetson001 发表于 2008-10-10 10:14 | 显示全部楼层

222222222

;*********************************************************************<br />;&nbsp;&nbsp;&nbsp;UMULT8x8&nbsp;-&nbsp;&nbsp;Prod_H:Prod_L&nbsp;&nbsp;=&nbsp;&nbsp;mulcnd&nbsp;*&nbsp;mulplr<br />;<br />UMULT8x8:<br />&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;Prod_H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Clear&nbsp;outputs<br />&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;Prod_L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;8<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;count<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;mulcnd,&nbsp;W<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS,&nbsp;C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Clear&nbsp;the&nbsp;carry&nbsp;bit&nbsp;in&nbsp;the&nbsp;status&nbsp;Reg.<br />UM8x8loop:<br />&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mulplr,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;btfsc&nbsp;&nbsp;&nbsp;STATUS,&nbsp;C<br />&nbsp;&nbsp;&nbsp;&nbsp;addwf&nbsp;&nbsp;&nbsp;Prod_H,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prod_H,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prod_L,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;count,&nbsp;F<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;UM8x8loop<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return<br />
 楼主| zhaohe2001 发表于 2008-10-10 13:55 | 显示全部楼层

谢谢各位

还是没人说PICC中乘法是怎么处理的<br />比如&nbsp;C=A*B;
xieyuanbin 发表于 2008-10-10 21:33 | 显示全部楼层

这个有两种.

如果是*2或2的N次方,就用左移,如果不是,则调用乘法函数,该乘法函数和一般汇编用的乘法子程序大致一样.
 楼主| zhaohe2001 发表于 2008-10-11 09:34 | 显示全部楼层

谢谢各位!

那样的话,用PICC就不用自己写乘法函数了!
兰天白云 发表于 2008-10-13 18:11 | 显示全部楼层

楼上废话

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

1168

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部