打印

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

[复制链接]
2918|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaohe2001|  楼主 | 2008-10-9 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
晶振4M
沙发
zhaohe2001|  楼主 | 2008-10-9 15:44 | 只看该作者

我自己写了一个

程序空间占用44Word
最长计算时间要80us

使用特权

评论回复
板凳
yewuyi| | 2008-10-9 16:09 | 只看该作者

需要看是哪个芯片

有的有硬件乘法器,有的没有,代码和速度也不一样

使用特权

评论回复
地板
zhaohe2001|  楼主 | 2008-10-9 16:36 | 只看该作者

我用的是16F系列PIC

使用特权

评论回复
5
yewuyi| | 2008-10-9 20:05 | 只看该作者

16系列没有硬件乘法器,

乘法是用的累加实现的,具体的执行时间和累加的次数有关,你可以执行255*255看看最大时间

使用特权

评论回复
6
zhaohe2001|  楼主 | 2008-10-9 20:42 | 只看该作者

PICC乘法是用移位来算的吧

不是累加。我自己写的也是用的移位,但不知道是不是比PICC的乘法快

使用特权

评论回复
7
su_mj000| | 2008-10-9 23:18 | 只看该作者

只需11条指令就够了

_mul8::
        clrf    4
        bsf     4, 3
        clrf    _$$-2
L4:
        bcf     3, 0
        btfsc   _$$-1, 0
        addwf   _$$-2, F
        rrf     _$$-2, F
        rrf     _$$-1, F
        decfsz  4, F
        goto    L4
        return

使用特权

评论回复
8
谈的元| | 2008-10-9 23:37 | 只看该作者

$$什么意思约?

使用特权

评论回复
9
zhaohe2001|  楼主 | 2008-10-10 08:58 | 只看该作者

su_mj000 的程序挺巧妙!

呵呵,比我的要简单,收下了,谢谢!
不过定义的 $$符号有点特别。建议改一下

使用特权

评论回复
10
su_mj000| | 2008-10-10 10:03 | 只看该作者

"_$$"是特殊符号

"_$$"是我的汇编器(assembler)所识别的特殊符号。它位于内存的高端区域(即0x70~0x7F空间)。该子程序实现两个8位有符号或无符号数的乘法。若两个乘数均为
无符号数的话,‘_$$-2’和‘_$$-1’内的结果即是16位乘积。倘若只需得到8位的乘积,
" bcf  3, 0"可以省略。顺便附上该子程序的C语言形式:

void _mul8 (void)
{
    FSR  = 0;
    FSR |= 1 << 3;    // cnt = 8
    asm ("clrf    _$acc1$");

    do
    {
        _C = 0;
        asm ("btfsc   _$acc0$, 0");
        asm ("addwf   _$acc1$, F");
        asm ("rrf     _$acc1$, F");
        asm ("rrf     _$acc0$, F");
    } while ( --FSR );
}

使用特权

评论回复
11
jetson001| | 2008-10-10 10:14 | 只看该作者

222222222

;*********************************************************************
;   UMULT8x8 -  Prod_H:Prod_L  =  mulcnd * mulplr
;
UMULT8x8:
    clrf    Prod_H                ; Clear outputs
    clrf    Prod_L                ;  "
    movlw   8
    movwf   count
    movf    mulcnd, W
    bcf     STATUS, C            ; Clear the carry bit in the status Reg.
UM8x8loop:
    rrf     mulplr, F
    btfsc   STATUS, C
    addwf   Prod_H, F
    rrf     Prod_H, F
    rrf     Prod_L, F
    decfsz  count, F
    goto    UM8x8loop

    return

使用特权

评论回复
12
zhaohe2001|  楼主 | 2008-10-10 13:55 | 只看该作者

谢谢各位

还是没人说PICC中乘法是怎么处理的
比如 C=A*B;

使用特权

评论回复
13
xieyuanbin| | 2008-10-10 21:33 | 只看该作者

这个有两种.

如果是*2或2的N次方,就用左移,如果不是,则调用乘法函数,该乘法函数和一般汇编用的乘法子程序大致一样.

使用特权

评论回复
14
zhaohe2001|  楼主 | 2008-10-11 09:34 | 只看该作者

谢谢各位!

那样的话,用PICC就不用自己写乘法函数了!

使用特权

评论回复
15
兰天白云| | 2008-10-13 18:11 | 只看该作者

楼上废话

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

1168

帖子

7

粉丝