### 3-9　スタックポインタ

RAMのバンク0をスタックメモリとして使用しています。このスタック領域のアドレス指定を行う8ビットレジスタがスタックポインタ（SP）です。

SPは、SFRの106H番地に割り当てられており、スタックメモリへの退避動作に先だってインクリメントされ、スタックメモリからの復帰動作後に、デクリメントされます。

リセット時には、SPの値は不定となりますが、システムプログラムが7FHに初期化します。SPは初期化された状態でアプリケーションが呼び出されます。

スタックは、RAMバンク0の80Hから0FFH（上位）に向けて消費されます。また、時計機能がスタックを最大20バイト利用します。したがって、アプリケーションは108バイトのスタックが利用できます。 PUSH命令を実行すると、SPがインクリメントされてからデータがストアされることに注意してください。 また、RAMバンク1にアクセス中にPUSH，POPした場合でも、RAMバンク0のスタック領域にデータがストアされます。

##### ■スタックポインタ（SP）

シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
SP | 106H | R/W | SP7 | SP6 | SP5 | SP4 | SP3 | SP2 | SP1 | SP0
リセット時 | X | X | X | X | X | X | X | X

PUSH命令実行時は、SPをインクリメントし、オペランドで指定するSFRおよびRAMのデータを退避します。POP命令実行時は、オペランドで指定するSFRおよびRAMへデータを格納した後、SPをデクリメントします。

RAMバンクを1に指定しPUSH、POP命令を実行しても、RAMバンク0にスタックされます。また、RAMアドレスをオペランドにすると、バンク1ではなく、バンク0のRAMがアクセスされます。

CALL命令実行時は、SPをインクリメントし、プログラムカウンタ（PC）の下位8ビットをスタックに退避した後、SPをインクリメントし、PCの上位8ビットを退避します。RET命令実行時は、SPで指定されるデータをPCの上位8ビットに格納した後、SPをデクリメントし、このSPで指定されるデータをPCの下位8ビットに格納した後、SPをデクリメントします。

割り込み受け付け時は、SPをインクリメントし、PCの下位8ビットをスタックに退避した後、SPをインクリメントし、PCの上位8ビットを退避します。割り込み処理から戻るためのRETI命令実行時は、SPで指定されるデータを、PCの上位8ビットに格納した後、SPをデクリメントし、このSPで指定されるデータをPCの下位8ビットに格納した後、SPをデクリメントします。

[←] | [INDEX] | [→]