標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第204回]

●CMP命令のクロック毎の動作の写真です

CMP命令はAレジスタと、レジスタ、メモリの値とを比較する命令です。
Aレジスタと定数値とを比較するCPI命令も、同じ動作をする命令です。

比較は、Aレジスタから、レジスタ、メモリ、定数値を減算することで行われます。
CMP命令の動作はキヤリー(ボロー)無し減算命令のSUBと同じです。
唯一、異なっているのは、CMP命令もSUB命令と全く同じ減算を行いますが、その結果によってフラグのセット、リセットのみを行い、計算結果をAレジスタに書き込むことはしないで、結果の値は捨ててしまうことです。

CMP命令は比較の結果が等しいかどうかを確認するために、Z(ゼット)フラグがセットされるかどうかを見ることと、大小を比較した結果、C(キャリー)フラグがセットされるかどうかを見ることが、主たる目的として使われます。

前回のSUB命令、SBB命令のテストの結果、レジスタには次の値が入りました。

Hレジスタ 34
Lレジスタ 89
Dレジスタ 12
Eレジスタ CD
Bレジスタ 21
Cレジスタ BC
Aレジスタ 21

今回は、それらの値をそのまま利用して、CMP命令を実行してみます。

前回のプログラムの続きにCMP命令を追加しました。

115 47    MOV B,A
の続きです。

116 B8    CMP B
117 B9    CMP C
118 BA    CMP D
119 BC    CMP H
11A 76    HLT

Aレジスタの値は21です。
そのAレジスタと、B、C、D、Hレジスタの値を比較してみます。
なお今回のプログラムはCMP命令の動作と、結果のフラグを、クロック毎に動作させることで確認することが目的ですから、プログラムとしての意味はありません(全く無意味なプログラムです)。

CMP命令はSUB命令の動作と同じですから、説明は極力省略することにします。

最初のCMP Bから、動作を見ていきましょう。
CMP Bは、Bレジスタにも同じ値が入っていますから、結果は、Z(ゼロ)フラグがセットされるはずです。

CMP B命令のT0の写真です。



AレジスタもBレジスタも21です。

CMP B命令のT4の写真です。



Aレジスタの値(21)が内部データバスに読み出され、ALUのレジスタ”A”に書き込まれています。

CMP B命令のT5の写真です。



ALUreg”A”WR(緑LED)が消灯しました。

ADDレジスタの右にある、下位4ビットの74HC283のC0に加える、桁上げのキャリー(減算のときはボロー)を示すLEDが点灯しました。
CMP命令はSUB命令と同じ動作なので、必ず桁上げの+1が加算されます。

CMP B命令のT6の写真です。



Bレジスタの値、21が内部データバスに読み出されました。
Bレジスタの左にある、BregRD(黄LED)が点灯しています。
内部データバスも21になっています。

ALUのレジスタ”B”には、内部データバスの21ではなくて、DEという値が書き込まれています。
DEは21を反転させた値です。

ALUレジスタ”A”とALUレジスタ”B”の値は即座に加算されて、ADDレジスタに表示されます。
21+DE+1=100の計算が行われて、ADDレジスタの表示が00になりました。

加算の結果、上位桁への桁上げが発生しますから、上位桁への桁上げを示す左側のLEDが点灯しています。
減算のときは、この桁上げの有無を逆転させた値が、上位桁へのキャリー(ボロー)になります。
ですから、今回の計算の結果、キャリーフラグはクリアされることになりますが、まだこの段階では、キャリーフラグへの反映は行われません。

CMP B命令のT7の写真です。



CMP B命令のT8の写真です。



ADDレジスタのLED表示の左側にある、AddRD(黄LED)が点灯して、加算の結果(00)が内部データバスに出されています。
しかし、Aレジスタには書き込みは行われず、Aレジスタはもとの値を保持しています。

フラグレジスタは、左端のS(サイン)フラグが消灯、その右のZ(ゼロ)フラグが点灯、その右のH(ハーフキャリー)フラグと、右端のC(キャリー)フラグが消灯しました。

[第199回]で、CMP命令は減算の結果の値は捨ててしまうのだから、計算結果を内部データバスに出力する必要はない、と書きましたが、それが間違いであることに気がつきましたので、そこのところを訂正いたしました([第199回]訂正&追記)。

CMP B命令のT9の写真です。



今回は時間がなくなってしまいました。この続きは次回にいたします。
2009.4.15upload

前へ
次へ
ホームページトップへ戻る