Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1228267
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: 嵌入式

2010-08-28 10:50:55

ARM编程技巧之--循环

看3个程序:
int func1(int loop)
{
int i=0;
for(i=0; i
}

int func2(int loop)
{
int i=0;
for(i=loop; i!=0; i--);
}

int func3(int loop)
{
int i=0;
for(i=loop; i>0; i--);
}

再看程序的反汇编:
    func1
        0x00000068:    e3a01000    ....    MOV      r1,#0
        0x0000006c:    e1510000    ..Q.    CMP      r1,r0
        0x00000070:    aa000001    ....    BGE      {pc} + 0xc  ; 0x7c
        0x00000074:    e2811001    ....    ADD      r1,r1,#1
        0x00000078:    eafffffb    ....    B        {pc} - 0xc  ; 0x6c
        0x0000007c:    e1a0f00e    ....    MOV      pc,r14
    func2
        0x00000080:    e3500000    ..P.    CMP      r0,#0
        0x00000084:    0a000001    ....    BEQ      {pc} + 0xc  ; 0x90
        0x00000088:    e2400001    ..@.    SUB      r0,r0,#1
        0x0000008c:    eafffffb    ....    B        {pc} - 0xc  ; 0x80
        0x00000090:    e1a0f00e    ....    MOV      pc,r14
    func3
        0x00000094:    e3500000    ..P.    CMP      r0,#0
        0x00000098:    da000001    ....    BLE      {pc} + 0xc  ; 0xa4
        0x0000009c:    e2400001    ..@.    SUB      r0,r0,#1
        0x000000a0:    eafffffb    ....    B        {pc} - 0xc  ; 0x94
        0x000000a4:    e1a0f00e    ....    MOV      pc,r14

用加法的代码比用减法的多了一条指令,自然也就多了一条指令的执行时间,特别是在循环内的循环,消耗的时间也是很可观的。

因此在大量循环内部的循环,尽量采用减法方式操作,提高代码效率。






阅读(1061) | 评论(0) | 转发(1) |
0

上一篇:SmartARM3250 CF卡使用说明

下一篇:sysstat和sar

给主人留下些什么吧!~~