打印

说说msp430的仿真指令

[复制链接]
3507|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
machunshui|  楼主 | 2008-1-25 14:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
msp430是精简指令集单片机,只有27条内核指令,居然比pic的低端系列还少。
但是msp430有大量的仿真指令。

一开始看书没仔细看,一带而过,想当然仿真指令是由几条内核指令仿真,肯定指令长度长,运行速度慢。
后来仔细一看,完全不是那么回事,恰恰是:

由1条内核指令配合常数发生器仿真,指令长度短,运行速度快。

举个例子:
msp430内核指令没有清除寄存器指令,如果没有仿真指令机制(使用常数发生器的),可以用:
mov #0,Rn
这条指令占用4个字节,即1个16位的指令后跟随一个16位常数0,
运行时间3个指令周期。


而实际上,由于msp430有使用常数发生器的仿真指令机制,可以运用这条仿真指令:
CLR Rn
它被汇编器翻译成:
mov R3,Rn(AS = 00)

即AS位为00的R3(CG2)的内容固定为0,这条指令运行时间1个指令周期,长度2个字节.

AS为替他数值,常数发生器CG1,CG2(即R2,R3)还可为固定的+1,-1,2,4,8等常数


这样的话,msp430的内核只要实现27条精简指令,内核一定很小,功耗也一定很小,这可能也是msp430能实现超低功耗的一个原因.

相关帖子

沙发
dld2| | 2008-1-25 18:33 | 只看该作者

这个仿真指令应该就是伪指令的意思吧

使用特权

评论回复
板凳
machunshui|  楼主 | 2008-1-25 19:20 | 只看该作者

和ARM伪指令的区别

二者的相同点在于都是由汇编器翻译成cpu能理解的指令.

msp430的仿真指令由于常数发生器的作用,会加快执行速度,改变指令的长度,

实际上是通过常数发生器的参与把绝对寻址方式改变为寄存器寻址方式从而加快指令执行速度和减小指令长度,从而cpu只要实现最小化的高度正交精简指令即可.

arm的伪指令,是为了方便用户,不用计算标号等和PC的相对关系或者其他的作用,但不会加快执行速度,改变指令的长度.
例如:
00008FE4 OPT l%
00008FE4 E28F0004 ADR R0, text
00008FE8 EF000002 SWI "OS_Write0"
00008FEC E1A0F00E MOV PC, R14
00008FF0 .text
00008FF0 EQUS "Hello!" + CHR$13 + CHR$10 + CHR$0
00008FFC ALIGN

下列代码有完全相同的效果:

00008FE4 OPT l%
00008FE4 E28F0004 ADD R0, R15, #4
00008FE8 EF000002 SWI "OS_Write0"
00008FEC E1A0F00E MOV PC, R14
00008FF0 .text
00008FF0 EQUS "Hello!" + CHR$13 + CHR$10 + CHR$0
00008FFC ALIGN

使用特权

评论回复
地板
liuf| | 2008-1-25 20:47 | 只看该作者

一直用C,还没看过指令。。。

使用特权

评论回复
5
MrDouble| | 2012-10-26 13:51 | 只看该作者
讲得很好,谢谢楼主分享

使用特权

评论回复
6
ayb_ice| | 2012-10-26 14:25 | 只看该作者
此一条非彼一条,
应该说是一类

使用特权

评论回复
7
xdli881017| | 2013-6-11 10:52 | 只看该作者
感谢楼主的分享,让小白的我受益匪浅

使用特权

评论回复
8
3C农民工| | 2013-11-25 11:26 | 只看该作者
感觉好强大

使用特权

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

本版积分规则

153

主题

3224

帖子

4

粉丝