ARM编程 - 溢出寄存器的意义

时间:2013-02-22 14:21:00

标签: architecture arm

我正在学习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"在上面的代码中表示。我在教授的讲义中提到了它,它只是说它是指溢出注册。我只是用谷歌搜索它,但我不太了解它以理解上面的代码。有人可以向我解释一下吗?谢谢!

1 个答案:

答案 0 :(得分:2)

sp是堆栈指针。它是r13的别名。在这种情况下,代码在堆栈上保留12个字节的空间以保留r4-r6的原始值,因为这些寄存器用于函数内部的计算。退出时,原始值将从堆栈恢复到这些寄存器中。