打印

单片机指令大比拼

[复制链接]
楼主: machunshui
手机看帖
扫描二维码
随时随地手机跟帖
101
machunshui|  楼主 | 2008-8-1 09:24 | 只看该作者 回帖奖励 |倒序浏览

和430对比

和430对比

使用特权

评论回复
102
aceice| | 2008-8-1 13:11 | 只看该作者

准备用cortex M3

低端产品还是51好了,学新东西的惯性不小~

使用特权

评论回复
103
ayb_ice| | 2008-8-1 16:02 | 只看该作者

還是430的指令比較猛

使用特权

评论回复
104
formatC| | 2008-8-1 16:51 | 只看该作者

技术贴不敢兴趣, 吵架贴看着就是爽

^_^

使用特权

评论回复
105
machunshui|  楼主 | 2008-8-1 21:41 | 只看该作者

如此低效率的430

看看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位,和每个寄存器都可参与运算,

可能实际在运算比较复杂,运算量比较大的时候,表现要好一点.

但是总体来讲还是比较低的.

使用特权

评论回复
106
machunshui|  楼主 | 2008-8-1 21:46 | 只看该作者

avr表现如何?

avr表现如何?

看了一下avr的指令级,感觉还是不错的.

使用特权

评论回复
107
望断云山| | 2008-8-1 22:29 | 只看该作者

爱用什么用什么

我做的项目让51跑在6M上就已满足需要了。我才不计较指令周期代码效率这些呢。呵呵呵,当然我做的那都是小菜项目。

使用特权

评论回复
108
平常人| | 2008-8-1 22:39 | 只看该作者

有什么好比的,不同产品定位不同,自然指令的功能不同

真要比,也要先比定位,再比指令类别的完整性,再比指令的完备性,再比程序员模型,这些比完了,才能比指令效率,比指令功耗,比芯片面积。。。。。

火车和汽车能放一块比吗?开玩笑。。。。。。。。

使用特权

评论回复
109
machunshui|  楼主 | 2008-8-1 23:03 | 只看该作者

爱选啥,选啥

爱选啥,选啥,

也没有强迫各位选pic,

或者不选430吧?

商业人们,

不要激动

使用特权

评论回复
110
machunshui|  楼主 | 2008-8-1 23:06 | 只看该作者

只是比较一下指令的而已

只是比较一下指令的而已,

又没有说某一种综合性能片子不行?

比较一下指令,不行吗?

论坛上的商业人事不爱看,可以不看

使用特权

评论回复
111
machunshui|  楼主 | 2008-8-3 18:47 | 只看该作者

pic24具有极高的指令运行效率

pic24具有极高的指令运行效率,

甚至相同MIPS下,指令的运行效率和标准的12时钟周期51不相上下

使用特权

评论回复
112
lyjian| | 2008-8-3 20:08 | 只看该作者

拿一个16bit的PIC和一个8bit的51来比

搂主脸皮够厚的

使用特权

评论回复
113
Swd21ic| | 2008-8-3 22:13 | 只看该作者

re

MDLB..我是不懂PIC.不然也来扯2句..
LZ对底层了解挺深入的..: )

使用特权

评论回复
114
machunshui|  楼主 | 2008-8-3 23:54 | 只看该作者

lyjian这话说得就不对了

lyjian这话说得就不对了.

51的指令系统和16bit的PIC为什么不能比啊?

又没有比较两者的运算能力.

同MIPS下,pic24和51的指令运行比较占用的指令周期数目,没有什么不公平的.



再说,我就是为了看看各种单片机的指令特点,

而你看不得别人提51,生怕有人说51不好.


116楼实在是太抬举了,就是图个乐子,错误不少.

使用特权

评论回复
115
ayb_ice| | 2008-8-4 11:13 | 只看该作者

430的代碼效率是比較差

但執行效果是很高的

使用特权

评论回复
116
machunshui|  楼主 | 2008-8-4 11:35 | 只看该作者

430的执行效率也不高

mov.b &A,R14   2指令字,3指令周期
add.b &B,R14   2指令字,3指令周期
mov.b R14,&C   2指令字,4指令周期

RAM--->寄存器(直接寻址)     2指令字, 3指令周期

寄存器--->RAM(直接寻址)     2指令字, 4指令周期


可以说,执行效率相当低.


猜想,msp430的这样可能于指令数目非常少有关系,

指令数目非少,又是精简指令,内核就非常小,

自然功耗容易得到控制.
   


使用特权

评论回复
117
ayb_ice| | 2008-8-5 08:21 | 只看该作者

430可以任意直接地址(16位的)直接傳送數據

試問有誰可以做到,當然還有其它的猛的地方...
430雖然是risc,但不是真正意義的risc,指令長度是可變的,指令少是不同廠家對一條指令定義方法不同,仔細看指令表你就會明白,但430的代碼效率確實不高,因為flash現在根本不值錢...

使用特权

评论回复
118
wlq_9| | 2008-8-5 08:58 | 只看该作者

拿51来说

访问RAM效率仍然低得很.虽然有直接寻址,但寄存器间址和DPTR寻址呢?效率其低!反之,大RAM的时候430效率高得多,一是支持寄存器间址64K空间,二是支持64K空间RAM直接访问.更重要的是430有多个寄存器可以利用,因此程序大部分操作都是在进行寄存器操作,效率很高.反之,51有相当部分的指令严重依赖ACC,因此,操作之前必须多进行内存复制的动作.因此,51的程序你经常会通遍看到mov a,***的操作,然后再mov **,a.这在其它单片机比较少见!

难道51效率算高????为什么51搞出个双DPTR,不是没有原因的!即使双DPTR,这部效率比430差的依然十分远!

所以说,不谈应用方向,不谈项目无意义!

使用特权

评论回复
119
dragon_hn| | 2008-8-5 08:59 | 只看该作者

楼主要强行说PIC比51强,简直在误导新手

个人就是愿意用EMC的也不用PIC的.
51与PIC谁的指令效率高用过的人都知道.
除了指令效率外,大家还要考虑一个编译器效率的问题,用汇编就不说了.
基本的51一个指令要12个clock,这是失败的地方.不过指令还是比较先进的.
对现在的精简指令集单片机,虽然单clock,不过往往是把51的一条指令拆成几条来用,另外大部分不带乘除法运算,所以在涉及要乘除法的领域,要么用DSP,要么用51.在单IO类控制领域(无须乘除法的),考虑到成本和速度,用精简指令的就够了.
-------------------------------------------------------------------
指令51肯定比PIC先进.
51使用的领域也绝非PIC所能比拟.

使用特权

评论回复
120
wlq_9| | 2008-8-5 09:08 | 只看该作者

LS

是在用51的眼光看世界.
没有听说需要运算的地方用51的,真的.把51和DSP放在一起说事,有点.........
很多时候用51只是种惯性,并非指令结构谁优谁劣的问题.事实上PIC应用的一些地方,51反而少能及.象小家电,汽车电子,51就应用得很少.其它一些项目,就大家都能用,象51,AVR,MSP430.
其实430根本就不需和这些单片机比较,低功耗是它的强项.这个就足够了!
AVR架构也是很不错的,在51大量使用的世界里,搞出一个AVR内核,还能瓜分掉这么大一块市场,足以说明了很多东西.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则