arm7汇编实现1段内存整体左移或右移1位,请高人指点啊!

[复制链接]
3821|3
 楼主| wuyiduan 发表于 2007-11-27 11:44 | 显示全部楼层 |阅读模式
在C中定义了<br />uint8&nbsp;RED0DspBuf[7*80];<br />数组<br />要实现其中一段的连续80字节左移1位和右移1位2个函数,但是C太慢了。<br />所以用汇编,请教各位了!<br />
computer00 发表于 2007-11-27 12:14 | 显示全部楼层

这样移动肯定慢,不如想想其它办法,例如循环指针

  
 楼主| wuyiduan 发表于 2007-11-27 13:12 | 显示全部楼层

是显缓区,字库是横向的,只能这么做。

  
lenglx 发表于 2007-11-27 14:53 | 显示全部楼层

...

//&nbsp;左移<br />U8&nbsp;*&nbsp;p&nbsp;=&nbsp;...;<br />U32&nbsp;v0=0,&nbsp;v1,&nbsp;v2;<br />U32&nbsp;sft&nbsp;=&nbsp;(dots&nbsp;&&nbsp;15)&nbsp;&lt&lt&nbsp;1;<br />U32&nbsp;sft1&nbsp;=&nbsp;(32&nbsp;-&nbsp;sft);<br />U32&nbsp;loop&nbsp;=&nbsp;m_rcArea.cx&nbsp;/&nbsp;16;<br />__asm<br />{<br />_loop:<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1,&nbsp;[p];<br />&nbsp;&nbsp;&nbsp;&nbsp;ADD&nbsp;&nbsp;&nbsp;&nbsp;v2,&nbsp;v0,&nbsp;v1,&nbsp;LSR&nbsp;sft;<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v2,&nbsp;[p],&nbsp;#-4;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v0,&nbsp;v1,&nbsp;LSL&nbsp;sft1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SUBS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop,&nbsp;loop,&nbsp;#1;<br />&nbsp;&nbsp;&nbsp;&nbsp;BNE&nbsp;&nbsp;&nbsp;&nbsp;_loop;<br />}<br /><br />//&nbsp;右移<br />U8&nbsp;*&nbsp;p&nbsp;=&nbsp;...;<br />U32&nbsp;v0=0,&nbsp;v1,&nbsp;v2;<br />U32&nbsp;sft&nbsp;=&nbsp;(dots&nbsp;&&nbsp;15)&nbsp;&lt&lt&nbsp;1;<br />U32&nbsp;sft1&nbsp;=&nbsp;(32&nbsp;-&nbsp;sft);<br />U32&nbsp;loop&nbsp;=&nbsp;m_rcArea.cx&nbsp;/&nbsp;16;<br />__asm<br />{<br />_loop:<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1,&nbsp;[p];<br />&nbsp;&nbsp;&nbsp;&nbsp;ADD&nbsp;&nbsp;&nbsp;&nbsp;v2,&nbsp;v0,&nbsp;v1,&nbsp;LSL&nbsp;sft;<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v2,&nbsp;[p],&nbsp;#4;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v0,&nbsp;v1,&nbsp;LSR&nbsp;sft1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SUBS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop,&nbsp;loop,&nbsp;#1;<br />&nbsp;&nbsp;&nbsp;&nbsp;BNE&nbsp;&nbsp;&nbsp;&nbsp;_loop;<br />}<br /><br />我这个是LED用的,每个点占2比特.<br />这部分程序是16点(4字节)对齐之后的.<br />没有对齐的部分,我偷懒,用C了,呵呵.<br /><br />我的数据是LSB代表左边的点,MSB代表右边点.<br /><br />根据你的显示数据的格式,可能要修改以后才能用.<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

19

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部