你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 4375|回复: 2

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

[复制链接]

2

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2019-12-18
发表于 2013-9-10 13:02:18 | 显示全部楼层 |阅读模式
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 }
回复

使用道具 举报

3

主题

161

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-9-10 22:20:03 | 显示全部楼层

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

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

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2013-9-10 22:33:32 | 显示全部楼层

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

估计很难再怎么精简了。
回复 支持 反对

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版