在程序集中弹出{pc}

时间:2014-07-16 09:59:49

标签: c++ stm32 keil

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

pop{r2-r6,pc}

我觉得它给了我一个很难的错误。我理解pop有什么用,但我不确定pc部分是什么意思。我无法在互联网上的任何地方找到它解释,它在我的代码中不是任何变量。

我在c ++的stm32上使用keil

2 个答案:

答案 0 :(得分:2)

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

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

如果导致崩溃,那么可能是因为堆栈上的地址已损坏。也许你在本地数组的边界之外写字,或者在函数调用级别太深的情况下溢出堆栈。

答案 1 :(得分:0)

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

ARM组件中的默认值,它只是在函数返回时覆盖PC寄存器。您通过pop语句看到的只是返回的直接方式see here

你的问题的其余部分在Mike的帖子中得到了很好的解释。