[H8-ML(2262)] Re: 例外処理でのスタックポインタ
From: 廣田 正孝 <mhirota@xxxxxxxxxxxxx>
Date: 2002年10月06日(日)12時48分50秒
  宮前さんこんにちは、廣田@本庄市です。
藤原さんが詳細に説明しているので手短に。

DION vega wrote:
> 
> 宮前です(アマチュア)
> 
> AKI−H8/3084F で3048用のCを使用しています。
> (メインはアセンブラ)
> 
> これから割込みを数種類使用したプログラムを作成する計画です。
> (今まで割込みは避けてました) 一部多重割込みあり。

 スタックは「割り込みだけ」で使われる物では有りません。割り込みを
意識するしないに関係なく「レジスタデータの一時退避」、「ローカル変数
領域」として使われます。JSRとRTSで「戻り先アドレスの格納」として使わ
れ、例外処理でCCRを退避・復帰しますが、これも「「レジスタデータの一時
退避」の一種です。

 スタックポインタは「電源が入って最初に実行される命令でセットしなければ
ならない」という趣旨の記述がマニュアルの「例外処理」説明に書いてあります。
宮前さんの作ったプログラムもそうなっているはず?です。

 でも、デバッガソフトやRTOSの管理下でのプログラムばかり作っていると
これらのソフトウェアがスタック初期化を行ってからユーザプログラムに
制御を渡すので、あまりSP値を意識しません。 つまりスタックに関する認識が
できなくなってきます。

 
> 偶数にしないとCCRが正しく復旧しないとあります。
> 偶数にするには具体的にどうしたら良いのでしょうか?

  MOV.L #(偶数):32,SP
です。この命令がリセット例外処理の最初の命令になります。

> 最初偶数にしても途中で、奇数になることはないのでしょうか?

 SPは汎用レジスタER7ですので、宮前さんが意図的にデータを奇数にしようと思え
ばできますし、意図してなくてもプログラムのバグでスタックが奇数に書き換えら
れてしまう場合が有ります。
スタックオペレーション命令(JSR,RTS,PUSH,POP,TRAPA,RTE等)を使う場合は偶数から
奇数になることは有りません。

では。
-- 
/******************************************************************************
My mail is reproduced precisely by making a setup of a lapel of your mail 
software more than 80 characters.
Name: 廣田 正孝 "Masataka Hirota"
E-mail address:  mhirota@xxxxxxxxxxxxx
                 GCD03040@xxxxxxxxxxx
******************************************************************************/
スレッド概略
[2260(R)](起点)
 └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]