我正在学习ARM中的程序,我教授的讲义以下代码为例:
int leaf_examp(int g, int h,
int i, int j)
{
int f;
f = (g+h)-(i+j);
return f;
}
他已将以下内容作为上述过程的相应ARM代码:
Leaf_examp:
SUB sp, sp, #12
STR r6, [sp,#8]
STR r5, [sp,#4]
STR r4, [sp,#0]
ADD r5, r0, r1
ADD r6, r2, r3
SUB r4, r5, r6
MOV r0, r4
LDR r4, [sp,#0]
LDR r5, [sp,#4]
LDR r6, [sp,#8]
ADD sp, sp, #12
MOV pc, lr
我不明白含有" sp"在上面的代码中表示。我在教授的讲义中提到了它,它只是说它是指溢出注册。我只是用谷歌搜索它,但我不太了解它以理解上面的代码。有人可以向我解释一下吗?谢谢!
答案 0 :(得分:2)
sp
是堆栈指针。它是r13
的别名。在这种情况下,代码在堆栈上保留12个字节的空间以保留r4-r6
的原始值,因为这些寄存器用于函数内部的计算。退出时,原始值将从堆栈恢复到这些寄存器中。