看看msp430的表现:
1.
unsigned char A,B
A = B;
mov.b &B,&A 3,6
3指令字 6指令周期
2.
unsigned char A,B,C
C = A+B;
mov.b &A,R14 2,3
add.b &B,R14 2,3
mov.b R14,&C 2,4
6指令字 10指令周期
3.
unsigned char A[10],B,C
A[B] = C
mov.b &B ,R15 2,3
and.w 0xff,R15 2,2
mov.b &C,_A(R15) 3,6 //_A为数组的首地址,如0x200
7指令字 11指令周期
4.
unsigned char A[10];
unsigned char i;
for(i = 0; i < 10;i++)
{
A = 1;
}
clr.b &i 2,4
jmp L1 1,2
L2 mov.b &i,R15 2,3
and.w #0xFF,R15 2,2
mov.b #0x1,_A(R15) 3,6
inc.b &i 2,4
L1 cmp.b #0xA,&i 3,5
jnc L2 1,2
16指令字 226指令周期
5.
unsigned char A,B;
if(A > 10)
B = 0;
else
B = 1;
cmp.b #0xB,&A 3,5
jnc L1 1,2
clr.b &B 2,4
jmp L2 1,2
L1 mov.b #0x1,&B 3,5
L2:
10指令字 16指令周期
6.
unsigned char A,B
switch(A)
{
case 0:
B = 10;
break;
case 1:
B = 20
break;
default:
B = 30;
break;
}
mov.b &A,R14 2,3
sub.b #0x0,R14 2,2
jeq L1 1,2
dec.b R14 1.1
jeq L2 1,2
jmp L3 1,2
L1 mov.b #0xA,&B 3,5
jmp next 1,2
L2 mov.b #0x14,&B 3,5
jmp next 1,2
L3 mov.b #0x1E,&B 3,5
next:
19指令字 17指令周期
真没想到msp430如此低效率,考虑到是16位,和每个寄存器都可参与运算,
可能实际在运算比较复杂,运算量比较大的时候,表现要好一点.
但是总体来讲还是比较低的. |