アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
PICマイコンで割り込みをやる場合、
MOVFはSTATUSのZフラグに影響を与えるので、
使わない、とありますが、
何故、MOVFでZフラグに影響を与えるのか、
どういう影響を与えるのか分かりません。
割り込みを使わなくても、STATUS<Z>を
条件判断に使っている限り、
MOVFは使えないのでしょうか。

また、
本によっては、
(割り込みのはじめ)
MOVWF W_TEMP
MOVF STATUS,W(*)
MOVWF ST_TEMP
   ~割り込みの内容
MOVF ST_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
(割り込み終わり)
のように書いてあり、
この場合、*で、
STATUSのコピー前(同時)に、
MOVFを使っていますが、
これは、OKなのでしょうか。

何か分かる人がいましたら、
よろしくお願いします。

A 回答 (1件)

こんばんわ。



>何故、MOVFでZフラグに影響を与えるのか、どういう影響を与えるのか分かりません。
MOVFでZフラグに影響が出るのは、PICの設計の思想の問題なのですが、とりあえず影響を与えると受け入れるしかありません。
割り込みは、いつ発生するか分りませんので全てのフラグとレジスタに影響を与えては行けません。割り込み開始時と同じ状況に復元して割り込み処理を終了する必要があります。
>割り込みを使わなくても、STATUS<Z>を条件判断に使っている限り、MOVFは使えないのでしょうか。
条件分岐とかで判断する前にMOVFを使うとZフラグ変わってしまいます。

以下の割り込みの開始処理の解説してみます。
MOVWF W_TEMP   ;WレジスタをW_TEMPに退避。
MOVF STATUS,W ;STATUSレジスタをWレジスタへ。
MOVWF ST_TEMP ;STATUSレジスタをST_TEMPに退避。
で、この時のMOVFが問題ないのかって事だと思うのですが。
MOVFでZフラグが変化するのは移動後なんです。つまりレジスタの中身を移し変えた後で変化します。
なので、
MOVF STATUS,W
とすると元のSTATUSレジスタの内容がwレジスタに移されます。
その後にZフラグが変化しますが、wレジスタにあるSTATUSレジスタの内容はMOVF前のままって事になります。

えーと、分っていただけましたか?
分らなかったら、また補足などで質問してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!
大分、得した気分です。
MOVFでZが変わる理由がないこと(あっても
非常に本質的で難解なこと)。
MOVFで回避するのが先だから、
MOVF STATUS,Wが成り立つこと
(割り込みの最後は、
MOVWF STATUSで、STATUSを
戻しているので、MOVFが使えず、
SWAPFを使っていること)。
割り込み以外でもMOVFは問題と
なるが、通常は、STATUSのZを
チェックする
直前で、計算を実行しているので、
MOVFの入る余地がないこと。

すべて、解決しました。
本当にありがとうございました。

お礼日時:2009/03/09 19:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!