質問: アセンブリ言語の勉強中です。 割込み前後で、スタックポインタの値というのは、同じ値になっているのでしょうか? 割込み前に、プログラムカウンタや汎用レジスタの保存をして、割込み処理(func())を行い、その後、汎用レジスタとプログラムカウンタの復旧をすると思うのですが、スタックポインタが割込み処理(func())をしている間に書き換わってしまうと、割込み処理後に、汎用レジスタやプログラムカウンタの復旧ができなくなってしまうのではないでしょうか・・?
回答: 同じです、、と言うより、割り込み処理は、そのように作成しないといけません。 H8がどうなっていたかは、覚えていないですが、 現在のアドレス(とCCR)をスタックに Pushするようです。 それ以外は、自前ですべてする必要があったと思います。 普通はアセンブラで記述するのですが、ライブラリでまとめて行うものがあったかも。(割込みの先頭で、自前のスタックに切り替え、終了時にスタックを戻すとか) 正確なところは、H8 のアセンブラマニュアルを参照しましょう。 ちょっと検索したところ ハードウェアマニュアルがありました。 PC と CCR のみ スタックにpush されるようですね。(「2.CPU632.8.4 例外処理の動作」) 後は、割込み処理側の責任。 昔、使ったと思ったら、マニュアルの発行が 2001年 初版 で、新規採用は"止めましょう" みたいですね。