是否可以访问LR,PC等CPU寄存器

时间:2015-04-07 11:02:34

标签: c assembly arm stm32

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

我正在使用arm gcc编译器

1 个答案:

答案 0 :(得分:3)

在海湾合作委员会:

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分配给您注册的寄存器。试着看看)