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