電子書籍の厳選無料作品が豊富!

STATUSのZフラグについてお聞きしたい事があります。
参考書を読んでみると、「Zフラグは、計算結果や代入結果が'0'となったことを表す指標のことをいう。数値の一致を知るには引き算をしてZフラグを見るプログラムを書く」とあります。
サンプルプログラムを見ても'0'か'1'しかZフラグには存在しない様に思われますが、現在私が組んでいるプログラムでは、プログラムが1行進むにつれてZフラグの数字が1ずつ増えていってしまい、計算結果を確認する事が出来ません。これは単に私のプログラムの設定が間違っているのでしょうか。もしソースがあれば判断出来るのであれば後ほどアップしますのでどなたか教えてもらえませんか。PICアセンブラで組んでいます。宜しくお願い致します。

A 回答 (11件中11~11件)

数値が1ずつ増えるの意味がわかりませんが・・・



とりあえず説明すると,STARUSレジスタはZ80(Z80使ったこと無かったらごめんなさい)で言うところのFレジスターにあたります。
STATUSレジスターは8Bitあるレジスターの各ビットに意味をもたせてあります。
Bit0はC(キャリー),Bit1はDC(デジットキャリー),Bit3はZ(ゼロ)・・・
といった具合です。

ですので,結果がゼロかどうかを確認する場合はSTATUSのBit3の状態を見ればいいわけです。

比較をしたい場合は・・・

movlw [比較の基準]
subwf [比較したい値の入ったファイルレジスタ]
btfsc STATUS, Z
goto [一致していた場合の処理]
~以下一致していない場合の処理~

と言うふうに書きます。
btfscをbtfssにすると「一致していた場合」と「一致していない場合」が逆になります。
STATUSやZは最初に書くおまじないの「~.inc」の中でビットやアドレスを定義してくれているので,書くだけで「STATUSレジスター(address:03h)のZフラグ(bit:3)」と言うふうにアセンブラが読み替えてくれます。

こんなもんでどんなもんでしょう?

この回答への補足

INAHO_SH4 様
早速のご回答有難う御座います。

数値が1ずつ増えるというのは、PICプログラムツールのデバッグモードでZフラグの数値の変化を見ていたんですが、デバッグ開始時(プログラムがスタートする時)は「0x00」となっているのですが、次の行に命令が移動すると「0x01」に、また次の行に命令が移動すると「0x02」という感じで数値がアップしていくんです。(これでうまく伝わるかな?)
例えば、下の様なプログラムがあるとします。

プログラム開始行 clrf PORTA   Zフラグの値:0x00
            clrf PORTB      ”     :0x01
            clrf PORTC      ”     :0x02
            clrf PO_A       ”     :0x03
            clrf PO_B       ”     :0x04
            clrf PO_C       ”     :0x05
こんな感じで、プログラムが進むと同時にZフラグの数字も増えていくんです。
もう少し補足説明が必要でしたら言ってもらえますか。うまく説明が出来ていないかもしれなくてすいません。宜しくお願い致します。

補足日時:2007/11/10 23:21
    • good
    • 0

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