打印

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

[复制链接]
2435|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuyiduan|  楼主 | 2007-11-27 11:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
computer00| | 2007-11-27 12:14 | 只看该作者

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

使用特权

评论回复
板凳
wuyiduan|  楼主 | 2007-11-27 13:12 | 只看该作者

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

使用特权

评论回复
地板
lenglx| | 2007-11-27 14:53 | 只看该作者

...

// 左移
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代表右边点.

根据你的显示数据的格式,可能要修改以后才能用.

使用特权

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

本版积分规则

5

主题

19

帖子

0

粉丝