ニャオニャオ21世紀

アイデア。レトロゲーム(MSX、PCエンジン、ファミコン、メガドライブセガサターン)と、MSXのゲーム開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハック、電子工作ほか雑記を綴っています

MSXマシン語入門(Z80 アセンブラ・機械語) 勉強レポート 第20回 Fレジスタの使い方

MSXの機体の情報が一杯 これは必見の書籍!! 僕らの好きなMSXハードカタログ

今回はFレジスタ(フラグレジスタ)です。

レジスタなんですが、ちょっと変わったレジスタだそうです。

(いつものとおり、MSX マシン語入門講座という本で勉強します)

 

データをロードしたり、他のレジスタとの間で

演算をすることは出来ないそうです。

 

名前のとおりで、

Aレジスタが0になったりとか、引き算の結果が負になったり

そういう時にフラグを立てるみたいです。

 

Fレジスタは8ビットなのですが、

各ビットごとに違う意味があるそうです。

フラグが立つということは、0が1になるということかな?

 

フラグレジスタの構造:

-----|------|------|------|------|---------|------|--------

   S  | Z  |    x   | H  | x   | P/V   | N  | CY

-----|------|------|------|------|---------|------|--------

 

S, Z, x, H, x, P/V,  N,  CY

です。

 

S: サイン(符号)フラグ

Z: ゼロフラグ

H: ハーフキャリーフラグ

P/V: パリティ/ オーバーフローフラグ

CY: キャリーフラグ

N: 加減算フラグ

x: 未使用

 

フラグレジスタは8ビットなのですが、中身が

01000000

となっているとZ(ゼロフラグ)だけが、フラグが立っている訳です。

 

この中で、よく使われるのがCY、Z、S、P/V の4つだそうです。

少なくてよかった^^

 

なんでも、N、HフラグはCPUで使うものでユーザーには関係ないそうです。

Xの未使用は、0も1も関係ないとのこと。

 

それでは順番に説明のページを読んでいきます。

 

CYフラグ (キャリーフラグ)

CYフラグは、足し算や引き算命令が行われた時に、

一番上の桁で、

・繰り上がり

・繰り下がり

が起きたかどうかを示すそうです。

 

足し算

繰り上がりが起きた時:1

起きなかった時:0 

 

引き算

引き算した結果がマイナスになる時:1

 

ただし、INC / DEC 命令は、CYフラグに影響を与えないそうです。

(INCといったら+1、DECといったら-1をする命令でした。)

 

また、論理演算( AND ,OR ,XOR )をすると、CYフラグは必ず

0になるそうです。

論理演算はまだやっていませんでしたね。

そのうちやります。

 

 

Zフラグ ( ゼロフラグ )

Zフラグは、AレジスタやHLレジスタが0のときに、1

となり、

それ以外の場合は、0

となります。

 

0の時というのは、8ビットなので、

00000000

というすべてのビットが0になったときですね。

このときフラグが立ちます( Z=1 )

 

なお、INC / DEC 命令で、16ビットの場合は影響を受けないとのことです。

うーん、具体例が書いてないのでよくわかりませんが、

INC / DECの時には、少し気をつけておけばいいでしょう。うん。

 

 

Sフラグ ( サインフラグ )

演算した時、

AレジスタやHLレジスタに残った値が、

正 (プラス)  は、0

負(マイナス)は、1

となります。

 

プラスの時は0というのがポイントですね。

普通は逆のような気がしてしまいます。

(補数と同じで、先頭ビットが1ならマイナスなのです。

補数もそのうちやります;)

 

P/V フラグ ( パリティ / オーバーフローフラグ )

2つのフラグが1つのところに入っているそうです。

 

パリティフラグ:

これはまだやっていない、論理演算の時に関係します。

AND , ORをやったとき、

Aレジスタの8ビットのうち1となっているビットの数が

偶数個のとき:1

奇数個のとき:0

だそうです。

 

ふーんという程度にみておきます^^

まあ、よく使うわけでもないようなので。

 

もうひとつの、

オーバーフローフラグ:

算術演算命令のときに、演算の結果、Aレジスタが

-128 〜   +127 の範囲をでてしまったとき:1

そうでないとき:0

 

だそうです。

マイナスの数字はどうやって表すの?と疑問に思われると

思います。

それは、補数というのを使います。

これも、ループ処理などの勉強を終えたら書きたいと思います。

 

 

 

まとめ:

Fレジスタの何ビット目がどうであるか?ということは

知らなくてもいいそうです。

一番よく使われるのが、

Zフラグ( 0 かどうか知るフラグ)、

CYフラグ ( 繰り上がり・繰り下がりを知るフラグ)の

2つだそうです。

 

結構覚えることがありました。

次回はどうしましょうか。

本のとおりにいくと、2バイトと2バイトの足し算となっていますが、

マシン語の計算は飛ばしてしまったので、

今後、計算の勉強をするときに2バイトの足し算もやります。

 

とにかくループの説明がしたい!

それをしないと、BASICゲームに使ったマシン語の説明が

出来ない!!

説明しないと気持ちが悪いのです^^

 

次は比較命令をやります。

 

それでは〜。

 

スポンサーリンク

 

 

 

MSXマシン語入門講座
MSXマシン語入門講座
posted with amazlet at 18.04.19
湯浅 敬
アスキー
売り上げランキング: 1,859,324

 

www.nyaonyao21.com

 

MSX BASIC + マシン語などの情報はこちらへ

www.nyaonyao21.com


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください