linux – ARM如何在IRQ处理程序中切换到svc模式?
发布时间:2020-12-14 00:04:50 所属栏目:Linux 来源:网络整理
导读:以下代码片段取自 linux v2.6.11. v3.8中也存在类似的东西. mrs r13,cpsrbic r13,r13,#MODE_MASKorr r13,#MODE_SVCmsr spsr_cxsf,r13 @ switch to SVC_32 modeand lr,lr,#15ldr lr,[pc,lsl #2]movs pc,lr @ Changes mode and branches 查看实际文件的以下链
以下代码片段取自
linux v2.6.11. v3.8中也存在类似的东西.
mrs r13,cpsr bic r13,r13,#MODE_MASK orr r13,#MODE_SVC msr spsr_cxsf,r13 @ switch to SVC_32 mode and lr,lr,#15 ldr lr,[pc,lsl #2] movs pc,lr @ Changes mode and branches 查看实际文件的以下链接: 我认为写入CPSR的模式位可以改变当前的ARM模式.但是如何写入SPSR(而不是CPSR)导致切换到SVC_32模式? (或)在最后一条指令“movs pc,lr”中发生了什么.有人能帮我理解吗? 解决方法
带有’S’后缀的mov或sub指令以及程序计数器作为其目标寄存器意味着异常返回.
它将SPSR的内容复制到CPSR,并将源寄存器的值移动到程序计数器(在本例中为链接寄存器). 在您的示例中,这有效地将模式设置为SVC模式并一次性从函数返回. 在ARM reference manual中有更多相关信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |