我试图理解链接寄存器和帧指针在ARM中是如何工作的.我去过几个网站,我想确认一下我的理解.
假设我有以下代码:
int foo(void)
{
// ..
bar();
// (A)
// ..
}
int bar(void)
{
// (B)
int b1;
// ..
// (C)
baz();
// (D)
}
int baz(void)
{
// (E)
int a;
int b;
// (F)
}
Run Code Online (Sandbox Code Playgroud)
我叫foo().将链接寄存器包含在点(A)的地址码和帧指针包含在代码点(B)的地址?在声明了所有本地人之后,堆栈指针可以是bar()内的任何位置吗?
[编辑]添加了另一个函数调用baz()
我正在学习 ARM,但无法理解程序状态寄存器指令、MSR 和 MRS 的完整形式。
例子:
MRS R0,CPSR ; Take a copy of the CPSR.
BIC R0,R0,#0x1F ; Clear the mode bits.
ORR R0,R0,#new_mode ; Select new mode
MSR CPSR,R0 ; Write back the modified CPSR.
Run Code Online (Sandbox Code Playgroud)