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 (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循环的汇编代码极其相似。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。