在ARM架构中,lr指的是Link Register,其作用是记录函数调用前的返回地址,也就是函数调用完成后要返回的地址。
当一个函数被调用时,当前函数的返回地址会被保存在LR寄存器中,函数执行完成后,程序会跳转到LR寄存器中保存的地址继续执行。
在ARM架构中,函数调用是通过栈来实现的。当一个函数被调用时,会将当前函数的栈帧保存在栈中,并将该函数的返回地址保存在LR寄存器中。
函数执行完成后,栈顶指针会指向当前函数的栈帧,此时可以通过将LR寄存器中保存的返回地址弹出栈顶指针,从而实现函数调用的返回。
在ARM架构中,lr寄存器还用于异常处理。当一个异常被触发时,当前代码的返回地址会被保存在lr寄存器中,异常处理程序完成后,会从lr寄存器中读取返回地址并返回到原来的代码位置。
为了保护lr寄存器的值,在进入一个函数之前需要将lr寄存器的值保存在栈中,在函数返回后再将lr寄存器的值恢复。
在ARM汇编语言中,保存lr寄存器的语句为“push {lr}”,恢复lr寄存器的语句为“pop {lr}”,一般会在函数的入口和出口处分别加上这两个语句。