我有一个针对手臂架构的问题。
我在ARM寄存器集中看到,我们有链接寄存器(r14)和程序计数器(r15)。在上下文切换时间链接寄存器获取最后执行的功能的程序计数器值的地址。但上下文切换也存储程序计数器值。
为什么我们需要保存程序计数器寄存器状态,因为我们有已经具有程序计数器值的链接寄存器?
答案 0 :(得分:2)
假设线程1正在运行,并且它正在执行指令0x1000,此时它调用位于0x2000的函数,并且链接寄存器存储0x1004。 PC已经移动到函数所在的位置,0x2008(有一些关于如何更新PC的问题,如果我没记错的话,它正在提取当前指令前2个字)。
现在发生了上下文切换,另一个线程需要开始运行。您需要存储0x2008的PC以及0x1004的LR,这样在您切换回来之后,您可以跳回到之前的功能。