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
用加法的代码比用减法的多了一条指令,自然也就多了一条指令的执行时间,特别是在循环内的循环,消耗的时间也是很可观的。
因此在大量循环内部的循环,尽量采用减法方式操作,提高代码效率。
阅读(1101) | 评论(0) | 转发(1) |