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