ARM小问题

            ldr     lr, =halt_loop          @设置返回地址
            ldr     pc, =main               @b指令和bl指令只能前后跳转32M的范围,所以这里使用向pc赋值的方法进行跳转
halt_loop:
            b       halt_loop


确实是将指针指向main函数,对于汇编调用C函数之前一定要配置lr,也就是链接寄存器,因为C函数执行完需要返回的,返回的时候pc指针会指向lr中的地址,此时就是halt_loop.当c函数执行完程序就返回到halt_loop指向的 b   halt_loop,进行死循环。不知道你看汇编程序的时候有没有看到在程序的最后都会写类似这样的语句
stop:
b  stop
就是让程序停在这,这个时候可以看各个寄存器的值,以便检查自己程序是否正确。如果是C函数比如用到printf("alkdjfkl");之类的。如果不让程序死循环,这种输出会瞬间消失,你也就不知道输没输出了。所以最后的死循环是很有作用的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值