arm汇编指令调用函数的时候,需要保存现场和回复现场
1.1
解读:
为什么我们的c语言程序可以调用其他函数后,继续回来执行我们的代码,而他的其他值没有变呢。编译器又是怎么做的,怎么确保我们的值不变,这个就要用到我们的保存和恢复现场,在调用函数之前,保存当前现场,调用函数后,在恢复到之前的现场。
首先,我们要懂,我们用的arm是要遵循APCS规则:
sp指向最后一个压入的值,数据栈由高地址向低地址生长的栈是满递减的, 所以sp指针一直指的就是我们的栈顶的那个数据。这个时候,我们要开始保存现场了:
(我们只要遵循一点,就是在调用函数之前,把我们的sp指针保存起来(保存到了ip中),当然同时也要保存pc和lk指针,因为我们要跳回之前的函数的地址的时候,要用到。)
1,2,3保存现场
"mov ip, sp \n\t" //sp的值放到ip中
1、首先我们把sp的值保存到ip寄存器中。(保存了调用寒素之前的sp寄存器的值)