0

私は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」を含む行の意味がわかりません。教授の講義ノートで参照しましたが、Spilling Registers を参照しているとだけ書かれています。私はそれをグーグルで検索しましたが、上記のコードを理解するのに十分なほどよく理解していません. 誰かが私にそれを説明できますか?ありがとう!

4

1 に答える 1

2

spスタックポインタです。の別名ですr13。この場合、r4-r6これらのレジスタは関数内の計算に使用されるため、コードは元の値を保持するためにスタックに 12 バイトのスペースを確保しています。終了時に、元の値がスタックからこれらのレジスタに復元されます。

于 2013-02-22T14:23:24.870 に答える