|
自己挖的坑自己填!经过一番小研究有所收获,总结一下: 1.关于子函数调用和异常中断处理是两种不同的情况,子函数调用是一个明确的关系,比如说我程序执行到哪里会调用这个子函数都是已知的(编译期间就能确定的)。而异常和中断的出现位置是不可知的。 2.举个例子在A函数中调用了B函数,各个函数怎么执行的在编译期间就确定了,当A调用B时,此时内部寄存器中的数据在执行完B后A还要接着用,所以就把调用B时会被改变的寄存器入栈保存(当然还有LR寄存器,入栈后LR会自动更新) 3.中断和异常想来就来,所以并不确定是在那个位置跳转到异常处理部分的,所以当异常中断来后就会把所有的内部寄存器保存(这就是所谓的栈帧,所以栈帧的大小也是固定的,注意入栈是区分调用者寄存器和被调用者寄存器,入的栈不同) 进调试看下汇编就明白了。有说的不对的欢迎指正 |
|
欢迎讨论 |