c - 是否可以访问LR、PC等CPU寄存器

标签 c assembly arm stm32

可以访问 Sp、Lr 和 Pc 并将它们存储在普通 C 变量中吗?...如果是,那么该怎么做。?请用c代码解释一下..

我正在使用arm gcc编译器

最佳答案

在海湾合作委员会:

uint32_t some_variable;
__asm__ __volatile__ ("mov %0, lr" : "=r" (some_variable));

这告诉编译器为 some_variable 分配一个寄存器(由占位符 %0 表示),然后发出指令 mov %0, lr。效果是将lr的值存储到some_variable中。

__volatile__ 告诉编译器不要重新排序该指令,我认为这是您想要的。

这也应该适用于 pcsp。 (或任何其他寄存器,但使用“普通”寄存器执行此操作不会很有用 - 除此之外,编译器可能会选择将 some_variable 分配给您要查看的寄存器)

关于c - 是否可以访问LR、PC等CPU寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29490016/

相关文章:

c++ - printf 如何从 float 中提取数字?

c++ - 带数组的内联汇编 lea

c++ - 在 gcc 中的内联汇编程序中出错

exception - 如何确定任务销毁的原因,VxWorks?

c - 在 C (Eclipse) 中获得 sqlite3 功能

c - 为什么 < 会比 <= 慢? [C]

c - linux内核源代码错误?

c - 段错误和引用结构数组

java - 寄存器分配中的预着色节点 - 每种颜色最多一种?

c - 了解 GCC 内联汇编函数