1.A1=B1;
mov A1,B1 总共: 3字节 3指令周期. pic: 2指令字,2指令周期
2. C1 = A1+B1;
mov A,A1 add A,B1 mov C1,A 总共: 6字节,6指令周期。 pic: 3指令字,3指令周期
3. A1[B1] = C1;
mov R0,#_A1 mov @R0,C1
总共: 4字节,4指令周期。 pic 6指令字,6指令周期
4. for(i = 0; i < 10;i++) { A = 1; } mov R0,#10 mov R1,#ADDR mov A,#1 LOOP: mov @R1,A djnz R0,LOOP inc R1 ret
总共: 10字节,56指令周期。
pic:17指令字,103指令周期(和51一样采取减法优化以后是103个指令周期)
5.
if(A1 > 10) B1 = 0; else B1 = 1; mov B1,#1 cjne A1,#10,CHECK //此处好像没有这条指令,lyjian造了一条指令啊 ret CHECK: jc RETURN dec B1 RETURN: ret
总共: ????????? pic:5指令字,5指令周期
如果改为: mov B1,#1 2,2 mov A,A1 2,2 cjne A,#10,CHECK 3,3/4 ret 1,5 CHECK: jc RETURN 2,2/3 dec B1 2,2 RETURN: ret 1,5
总共: 13字节,11指令周期。
pic:5指令字,5指令周期
6. unsigned char A1,B1
switch(A1) { case 0: B1 = 10; break;
case 1: B1 = 20 break;
default: B1 = 30; break; } mov A,A1 jnz OTHER_CASE mov B1,#10 ret OTHER_CASE: djnz A1,DEFAULT mov B1,#20 ret DEFAULT: mov B1,#30 ret
总共: 15字节,17指令周期
pic : 24指令字,15指令周期(原PIC的9个指令周期统计错误)
由于标准51的12个时钟周期,实际上标准51的执行效能还是要比低. 但是同MIPS的时候,标准51的执行效能确实比PIC高, 代码效率也高.
但是高速C8051f的和pic相比同MIPS时,指令的执行效能相当低!
当然鉴于C8051f高速度特性,其执行速度还是要比pic16会不少.
虽然,新华龙宣传是采用流水线技术实现单周期指令,但是从其指令的时钟周期数和标准51对比的变化看,并不象采取流水线对标准51进行改进切割的结果,(如果这样其指令周期数应该和标准51相同)
猜想可能是采取精简指令内核外包装搞成的,(可能也采取流水线技术),
实际上C8051F同MIPS下应该比标准51的代码执行速度低不少啊,
肯定不会是同频51的12倍,虽然宣称其峰值执行速度比标准51快8倍,
可能实际的平均执行速度同频恐怕只快5-6倍. |