这可能是一个愚蠢的问题,但在我的汇编代码中,在调试期间,我有
pop{r2-r6,pc}
我觉得它给了我一个很难的错误。我理解pop有什么用,但我不确定pc部分是什么意思。我无法在互联网上的任何地方找到它解释,它在我的代码中不是任何变量。
我在c ++的stm32上使用keil
答案 0 :(得分:2)
pc
或r15
是程序计数器,该寄存器提供处理器从中获取指令的地址。将其更改为另一个地址会使程序执行跳转到该地址。
在这种情况下,从堆栈读取地址以从函数调用返回;返回地址将在函数开头被压入堆栈(来自链接寄存器 lr
或r14
)。
如果导致崩溃,那么可能是因为堆栈上的地址已损坏。也许你在本地数组的边界之外写字,或者在函数调用级别太深的情况下溢出堆栈。
答案 1 :(得分:0)
PC
寄存器是程序计数器,它保存要在ARM体系结构上执行的下一条指令的地址(STM32使用ARM体系结构)。
ARM组件中的默认值,它只是在函数返回时覆盖PC寄存器。您通过pop语句看到的只是返回的直接方式see here。
你的问题的其余部分在Mike的帖子中得到了很好的解释。