在程序集中弹出 {pc}

Dud*_*ude 2 c++ stm32 keil

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

pop{r2-r6,pc}
Run Code Online (Sandbox Code Playgroud)

我认为这给了我一个硬故障例外。我明白 pop 的作用,但我不确定 pc 部分的含义。我无法在互联网上的任何地方找到它的解释,并且它不是我的代码中任何地方的变量。

我在 c++ 中的 stm32 上使用 keil

Mik*_*our 5

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

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

如果这导致崩溃,则可能是因为堆栈上的地址已损坏。也许您正在本地数组的边界之外写入,或者函数调用级别太深而导致堆栈溢出。