formyst 发表于 2013-9-10 13:02:18

IAR FOR STM8编译器关于乘法的汇编代码

STM8的乘法器是8位的,若要用到16位货32位乘法,则是调用函数完成。
如下例程用了8位乘法 16位乘法 和 32位乘法。消耗代码0.4K。应该算是蛮厉害的。
不知道有没有更精简的乘法器唉???
 
409 bytes of readonly  code memory 
  128 bytes of readonly  data memory 
  272 bytes of readwrite data memory 
 
 
 
//   38 void main(void)
//   39 {
main:
        CALL      L:?push_l2
        CFI ?b11 Frame(CFA, -2)
        CFI ?b10 Frame(CFA, -3)
        CFI ?b9 Frame(CFA, -4)
        CFI ?b8 Frame(CFA, -5)
        CFI CFA SP+6
        CALL      L:?push_w6
        CFI ?b13 Frame(CFA, -6)
        CFI ?b12 Frame(CFA, -7)
        CFI CFA SP+8
//   40   u8 a,b,c;
//   41   u16 aa,bb,cc;
//   42   u32 xx,yy;
//   43   a=0;b=0;c=0;aa= 0;bb=0;cc=0;yy=0;
        CLR       S:?b8
        CLR       S:?b9
        CLR       S:?b4
        CLR       S:?b11
        CLR       S:?b10
        CLRW      Y
        CLR       S:?b13
        CLR       S:?b12
        CLRW      X
        LDW       S:?w1, X
        LDW       S:?w0, X
//   44   while(1)
//   45   {
//   46     c=a++*b++;
??main_0:
        LD        A, S:?b8
        LD        XL, A
        LD        A, S:?b9
        MUL       X, A
        EXG       A, XL
        LD        S:?b4, A
        EXG       A, XL
        LD        A, S:?b9
        ADD       A, #0x1
        LD        S:?b9, A
        LD        A, S:?b8
        ADD       A, #0x1
        LD        S:?b8, A
//   47     aa = c*a;
        EXG       A, XL
        LD        A, S:?b8
        EXG       A, XL
        LD        A, S:?b4
        MUL       X, A
        LDW       S:?w5, X
//   48     cc = aa*bb++;
        LDW       S:?w0, Y
        LDW       X, S:?w5
        CALL      L:?mul16_x_x_w0
        LDW       S:?w6, X
        LDW       X, Y
        INCW      X
        LDW       Y, X
//   49     xx = cc*bb;
        LDW       S:?w0, Y
        LDW       X, S:?w6
        CALL      L:?mul16_x_x_w0
        LDW       S:?w3, X
        CLRW      X
        LDW       S:?w2, X
//   50     yy = cc*aa;
        CALL      L:?mov_w0_w5
        LDW       X, S:?w6
        CALL      L:?mul16_x_x_w0
        LDW       S:?w1, X
        CLRW      X
        LDW       S:?w0, X
//   51     yy*=xx;
        CALL      L:?mul32_l0_l0_l1
        JRA       L:??main_0
        CFI EndBlock cfiBlock0
//   52    // GPIOC->ODR = yy>>24;
//   53   }
//   54   
//   55 }

发表于 2013-9-10 22:20:03

RE:IAR FOR STM8编译器关于乘法的汇编代码

整个带硬件乘法器的芯片连接到mcu,算起来快。事半功倍。

zykzyk-93033 发表于 2013-9-10 22:33:32

RE:IAR FOR STM8编译器关于乘法的汇编代码

估计很难再怎么精简了。:D
页: [1]
查看完整版本: IAR FOR STM8编译器关于乘法的汇编代码