看看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位,和每个寄存器都可参与运算,
可能实际在运算比较复杂,运算量比较大的时候,表现要好一点.
但是总体来讲还是比较低的. |