Everything
9.1.1.1 汎用レジスタAX,BC,DE,HL

本仕様は,汎用レジスタAX,BC,DE,HLの各々について,関数呼び出しの前後で値が同一であることを保証しません。

割り込み発生の前後の場合は,利用中のレジスタ・バンクに属する汎用レジスタに限り,同一であることを保証します。保証するための手段には次の2種類があります。

-

スタック領域を使用する方法

割り込み発生時にスタック領域にレジスタの値を退避し,割り込み終了時にスタック領域から値を復帰します。後述する,汎用レジスタ以外のレジスタの場合もこの方法を使用します。

-

レジスタ・バンク切り替え機能を使用する方法

割り込み用プラグマ指令のレジスタ・バンク指定機能を使うと,スタック領域を使わずに,レジスタ・バンクの切り替えにより効率よく汎用レジスタの値の退避,復帰を行うことができます。

レジスタ・バンクの切り替えを使用する場合の注意事項を次に示します。これらの注意事項に該当する場合,割り込み発生前後でレジスタの値が同一であることは保証しません。

-

割り込み用プラグマ指令を使わず,割り込みハンドラ内でレジスタ・バンクを切り替えてはいけない。

-

割り込みハンドラ内から,return文以外の方法で復帰してはいけない。

-

割り込み発生元と同じレジスタ・バンクへ切り替えてはいけない。

多重割り込みである場合,最初の割り込み発生元,および発生元へ復帰するまでのすべての割り込みハンドラが,異なるレジスタ・バンクを使用する必要がある。