1、不定次数的循环,可以使用for、while、do{}while
2、不定次数的循环的举例
int checksum_v6(int *data, unsigned int N)
{
int sum = 0;
for(; N != 0; N--)
{
sum += *(data++);
}
return sum;
}
上述程序的汇编代码为:
checksum_v7_s
MOV r2,#0 ;sum = 0
CMP r0,#0 ; compare N,0
BEQ checksum_v7_end ; if(N == 0) goto end
checksum_v7_loop
LDR r3,[r2] #4 ;r3 = *(data++)
SUBS r1,r1,#1 ;N-- and set flags
ADD r2,r3,r2 ;sum += r3
BNE checksum_v7_loop ;if(N != 0) goto loop
checksum_v7_end
MOV r0,#r2 ;r0 = sum
MOV pc,r14 ;return r0
3、讨论:一般来说,数组的长度不可能为0
使用do{}while改写程序:
int checksum_v8(int *data, unsigned int N)
{
int sum = 0;
do
{
sum += *(data++);
} while (--N!=0);
return sum;
}
上述程序的汇编代码为:
checksum_v8_s
MOV r2,#0 ;sum = 0
checksum_v8_loop
LDR r3,[r2] #4 ;r3 = *(data++)
SUBS r1,r1,#1 ;N-- and set flags
ADD r2,r3,r2 ;sum += r3
BNE checksum_v8_loop ;if(N != 0) goto loop
MOV r0,#r2 ;r0 = sum
MOV pc,r14 ;return r0
4、结论:
使用do{}while改写的程序的汇编代码相对少了几行。
使用do{}while可以展现更好的性能和代码密度,前提是要保证循环至少执行一次。