【发布时间】:2019-02-09 23:10:33
【问题描述】:
在 Cortex-M0 上从向量区(即地址 0xC0 以下)执行时这条指令会失败,但在更高的 FLASH 中可以正常工作,是否有一些官方原因?
pop {r4,pc}
当这段代码从低于 0xC0 的地址执行时,PC 并没有真正从堆栈中弹出,而是继续执行 'pop' 之后的下一条指令(这是垃圾)。
【问题讨论】:
-
程序计数器中弹出的地址是什么?
-
堆栈指针是否对齐并指向正确的东西?
-
请提供一个演示问题的最小示例。
-
后面的指令是什么,你怎么知道它正在执行?
-
1.没有地址被“弹出”到计数器中,下一条指令的地址被加载,就好像该指令从未发生过一样。 2. 堆栈指针对齐且正确。 “pop”指令只是“push”之后的几条指令,中间只有一些 MOV/CMP/BNE。 3. 处理最小的例子。 4.后面的指令是NOP,我可以用调试器单步执行代码,观察POP在地址>256时成功,在地址