在程序集中弹出{pc}

Pop{pc} in assembly

本文关键字:pc 程序 程序集 集中      更新时间:2023-10-16

这可能是一个愚蠢的问题,但在我的汇编代码中,在调试期间,我有

pop{r2-r6,pc}

,我认为它给了我一个硬故障异常。我明白pop是做什么的,但我不确定pc部分是什么意思。我在互联网上找不到任何地方解释它,它不是我代码中的变量。

我在c++的stm32上使用keil

pcr15程序计数器,该寄存器给出处理器从其获取指令的地址。将其更改为另一个地址将使程序执行跳转到该地址。

在这种情况下,地址从堆栈中读取以从函数调用返回;返回地址将在函数开始时被压入堆栈(从链接寄存器 lrr14)。

如果这导致了崩溃,那么很可能是因为堆栈上的地址已经损坏。也许您正在编写超出局部数组的边界,或者由于太深的函数调用级别而使堆栈溢出。

PC寄存器是程序计数器,它保存着下一条要在ARM架构中执行的指令的地址(STM32使用ARM架构)。

ARM汇编中的默认设置是当函数返回时,简单地覆盖PC寄存器。您在pop语句中看到的只是一种直接返回方式,见这里。

你剩下的问题在Mike的帖子里有很好的解释。

相关文章: