在程序集中弹出{pc}
Pop{pc} in assembly
这可能是一个愚蠢的问题,但在我的汇编代码中,在调试期间,我有
pop{r2-r6,pc}
,我认为它给了我一个硬故障异常。我明白pop是做什么的,但我不确定pc部分是什么意思。我在互联网上找不到任何地方解释它,它不是我代码中的变量。
我在c++的stm32上使用keil
pc
或r15
是程序计数器,该寄存器给出处理器从其获取指令的地址。将其更改为另一个地址将使程序执行跳转到该地址。
在这种情况下,地址从堆栈中读取以从函数调用返回;返回地址将在函数开始时被压入堆栈(从链接寄存器 lr
或r14
)。
如果这导致了崩溃,那么很可能是因为堆栈上的地址已经损坏。也许您正在编写超出局部数组的边界,或者由于太深的函数调用级别而使堆栈溢出。
PC
寄存器是程序计数器,它保存着下一条要在ARM架构中执行的指令的地址(STM32使用ARM架构)。
ARM汇编中的默认设置是当函数返回时,简单地覆盖PC寄存器。您在pop语句中看到的只是一种直接返回方式,见这里。
你剩下的问题在Mike的帖子里有很好的解释。
相关文章:
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 网站和C++程序在同一台 Linux PC 上的通信
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- Visual C++ wxWidgets应用程序仅适用于我的PC
- 应用程序仅在安装了 Visual Studio 的 PC 上启动.这种行为的原因可能是什么
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的
- ACE在同一PC上具有多个应用程序实例 - 仅首先获取消息
- 编译的程序在其他窗口PC上停止响应
- 在PC上测试opengles程序
- 如何从 C Microsoft PC 应用程序向 iPhone 发送 APNS 推送通知
- 在C++程序中引用C#库,但不能引用其他PC
- 一个简单的PC应用程序制造商的数据记录应用程序
- 应用程序仅在具有Visual Studio的PC上运行
- 为什么我只需要直接在PC上编译ffmpeg,我将在其上开发将使用ffmpeg库的应用程序
- 为什么当我在控制台应用程序中打印出超过 7 个控制台输出时C++我的 PC 会发出哔哔声
- 我的OpenGL应用程序在ATI上运行,但在nNVIDIA的PC上不起作用
- Qt:我的应用程序没有显示在我的企业硬件中,而在PC中显示
- Arduino和PC之间通过Usb串行端口(C++控制台应用程序)进行通信
- 如何将数据从android设备传输到C++PC程序
- 当您下载其他库并将其功能添加到C ++程序中时,您是否能够在另一台PC上运行您的软件(没有库)?