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 } |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
RE:IAR FOR STM8编译器关于乘法的汇编代码
RE:IAR FOR STM8编译器关于乘法的汇编代码