ARM小问题

来源:互联网 发布:nginx 目录映射 编辑:程序博客网 时间:2024/05/17 06:16

            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");之类的。如果不让程序死循环,这种输出会瞬间消失,你也就不知道输没输出了。所以最后的死循环是很有作用的。