在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 1837|回复: 0

关于ARM汇编的问题?

[复制链接]
发表于 2005-10-19 19:50:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
int checksum_v1(int *data)
{
    char i;
    int sum = 0;
    for(i = 0; i < 64; i++)
    {
       sum += data;
    }
    return sum;
}
翻译成汇编:
checksum_v1:
    MOV r2, r0
    MOV r0, #0
    MOV r1, #0
checksum_v1_loop
    LDR r3, [r2, r1, LSL #2]
    ADD r1, r1, #1
    AND r1, r1, #0xff
    CMP r1, #0x40
    ADD r0, r3, r0
    BCC checksum_v1_loop
    MOV pc, r14
short checksum_v3(short *data)
{
    unsigned int i;
    short sum = 0;
    for(i = 0; i < 64; i++)
    {
       sum = (short)(sum + data);
    }
    return sum;
}
翻译成汇编:
checksum_v3:
    MOV r2, r0
    MOV r0, #0
    MOV r1, #0
checksum_v3_loop
    ADD r3, r2, r1, LSL #1
    LDRH r3, [r3, #0]
    ADD r1, r1, #1
    CMP r1, #0x40
    ADD r0, r3, r0
    MOV r0, r0, LSL #16
    MOV r0, r0, ASR #16
    BCC checksum_v3_loop
    MOV pc ,r14
问题是checksum_v1中的LDR r3, [r2, r1, LSL #2]为什么是左移2位,而checksum_v3中ADD r3, r2, r1, LSL #1是左移1位?
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-26 02:16 , Processed in 0.016427 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表