ネストされたサブルーチンのスタック操作

スタック操作は、サブルーチンのエントリと終了時で行うと効果的です。サブルーチンのエントリで必要なすべての作業レジスタをスタックにスアし、終了時にスタックからポップすることができます。

また、サブルーチンのエントリでリンクレジスタをスタックにプッシュしておけば、復帰アドレスを失わずに別のサブルーチンコールを安全に実行できます。この場合は、LR をポップしてその値を PC に移動する代わりに、サブルーチンの終了時にスタックから PC をポップすることによってサブルーチンから戻ることができます。以下に例を示します。

subroutine  PUSH    {r5-r7,lr} ; 作業レジスタと lr をプッシュする
            ; コード
            BL      somewhere_else
            ; コード
            POP     {r5-r7,pc} ; 作業レジスタと pc をポップする

Note

ARM/Thumb 混合システムでこの方法を使用する場合は注意する必要があります。ARMv4T システムでは、PC を直接ポップしても状態を変更することはでません。このような場合は、アドレスを一時レジスタにポップして、BX 命令を使用する必要があります。

ARMv5T 以降では、この方法で状態を変更できます。

Show/hide関連項目

概念

ARM プロセッサをターゲットとしたソフトウェア開発』

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0473FJ
Non-ConfidentialID111311