一·代码
do-while循环
void main(){
int sum = 0;
int i = 1;
do{
sum = sum 1;
i ;
}while (i < 100 );
}
这次我们利用Hopper
汇编分析:
100006250~100006260处分别是拉伸栈空间,分别给零寄存器,w0,x1入栈数据。
loc_10000626c~100006288处开始执行
100006288处:cmp比较w8-100
10000628c处:如果小于跳转到10000626c处循环,否则满足条件执行100006290
总结:先执行代码,后判断循环是do-while的特点
While&For循环
while (i<100){
printf("%d",i);
i ;
}
for (i < 100){
printf("%d",i);
i ;
}
100006234处:w8入栈
100006238处:cmp比较 w8-100
10000623c处:b.gt 跳转到100006278
100006240~100006270处:执行代码
100006274处:执行完毕往回调100006234 循环
10000623c处:判断是否b.gt,true调转到100006278,false继续循环
神奇的是:汇编里for循环与while循环的汇编代码极其相似。