分析 for(;;){break} 和 while(1){break}

FORLOOP:

Lfunc_begin0:
	                 
@ BB#0:
	sub	sp, #4
	movs	r0, #1       //存放立即数1到寄存器r0
Ltmp0:
	str	r0, [sp]         //把r0中的数据传给sp
LBB0_1:                                 @ =>This Inner Loop Header: Depth=1
	movw	r0, #50000  //存放立即数1到寄存器r0(即if条件里面的比较值5000)
Ltmp1:
	ldr	r1, [sp]       //将sp的数据传给r1
	adds	r1, #1     //r1的数据自加1
	str	r1, [sp]       //将r1的数据传给sp
Ltmp2:
	ldr	r1, [sp]       //将sp的数据传给r1
Ltmp3:
	cmp	r1, r0       //比较 r1 和r0的数值(i++ 50000)  (i++ 是否)
	bne	LBB0_3       //bne指令含义:如果比较结果不相等,就跳转。 本例中如果 i++ 和 5000不相同就跳转至LBB0_3步骤,如果相等就继续往下执行Ltmp4 
@ BB#2:
Ltmp4:
	b	LBB0_4      //跳转至步骤LBB0_4
Ltmp5:
LBB0_3:                                 @   in Loop: Header=BB0_1 Depth=1
	b	LBB0_1      //跳转至步骤LBB0_1
Ltmp6:
LBB0_4:
	add	sp, #4    //sp中的值加4
	bx	lr        //等同于 MOV PC, LR  (LR为链接寄存器有两种含义:
	                       1:保存子程序的返回地址,使用BL或BLX时,跳转指令自动把返回地址放入r14中,子程序通过把r14复制到PC来实现返回   
	                       2:当异常发生时用来保存异常的返回地址,可以处理嵌套中断) 本段指令意思是跳转到程序的返回地址,即结束程序
Ltmp7:
Lfunc_end0:

WHILELoop

Lfunc_begin0:
	
@ BB#0:
	sub	sp, #4
	movs	r0, #1    //存放立即数1到寄存器r0
Ltmp0:
	str	r0, [sp]     //把r0中的数据传给sp
LBB0_1:                                 @ =>This Inner Loop Header: Depth=1
	movw	r0, #50000  //存放立即数1到寄存器r0(即if条件里面的比较值5000)
Ltmp1:
	ldr	r1, [sp]       //将sp的数据传给r1
	adds	r1, #1    //r1的数据自加1
	str	r1, [sp]    //将r1的数据传给sp
Ltmp2:
	ldr	r1, [sp]     //将sp的数据传给r1
Ltmp3:
	cmp	r1, r0      //比较 r1 和r0的数值(i++ 50000)  (i++ 是否)
	bne	LBB0_3      //bne指令含义:如果比较结果不相等,就跳转。 本例中如果 i++ 和 5000不相同就跳转至LBB0_3步骤,如果相等就继续往下执行Ltmp4 
@ BB#2:
Ltmp4:
	b	LBB0_4    //跳转至步骤LBB0_4
Ltmp5:
LBB0_3:                                 @   in Loop: Header=BB0_1 Depth=1
	b	LBB0_1     //跳转至步骤LBB0_1
LBB0_4:
	add	sp, #4    //sp中的值加4
	bx	lr        //等同于 MOV PC, LR  (LR为链接寄存器有两种含义:
	                       1:保存子程序的返回地址,使用BL或BLX时,跳转指令自动把返回地址放入r14中,子程序通过把r14复制到PC来实现返回   
	                       2:当异常发生时用来保存异常的返回地址,可以处理嵌套中断) 本段指令意思是跳转到程序的返回地址,即结束程序
Ltmp6:
Lfunc_end0:


FORLoop 和 WHILELoop 区别在于 :LBB0_3 后紧接着有个Ltmp6


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值