在线时间2 小时
UID2006850
ST金币0
蝴蝶豆0
注册时间2013-5-3
新手上路
- 最后登录
- 2019-12-18
|
a0a.1 0b0c
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 } |
|