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

●CMP命令のクロック毎の動作の写真です(前回の続きです)

前回のおさらいです。

レジスタには次の値が入っています。

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

テストプログラムのCMP命令の部分です。

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

前回は最初のCMP B命令の写真をお見せしました。
今回はその次のCMP C命令からです。

●CMP C命令の動作の写真です

Aレジスタには21が入ったままです。
CレジスタにはBCが入っています。

21とBCとの比較です。符号無し数として考えると、当然21よりもBCの方が大きいですから、C(キャリー)フラグがセットされます。
その一方で、符号付の数として考えれば、BCは負の数ですから、BCの方が小さいことになります。
符号付数の比較の場合には、C(キャリー)フラグではなくて、S(サイン)フラグを見ます。
符号付数としての、21−BCの結果は正の値になりますから、S(サイン)フラグがクリアされます。

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



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

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



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



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

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

ALUレジスタ”A”とALUレジスタ”B”の値は即座に加算されて、ADDレジスタに表示されます。
21+43+1=65の計算が行われて、ADDレジスタの表示が65になりました(減算では必ず+1が加算されます)。

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

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



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



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

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

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



CMP C命令が終わりました。
次はCMP D命令です。

●CMP D命令の動作の写真です

Aレジスタには21が入ったままです。
Dレジスタには12が入っています。

21と12との比較です。今回は符号無し数として考えても、符号付数として考えても、当然21よりも12の方が小さいですから、C(キャリー)フラグもS(サイン)フラグもクリアされます。

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



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

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



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



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

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

ALUレジスタ”A”とALUレジスタ”B”の値は即座に加算されて、ADDレジスタに表示されます。
21+ED+1=10Fの計算が行われて、ADDレジスタの表示が0Fになりました(減算では必ず+1が加算されます)。

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

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



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



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

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

21−12の減算では、下位4ビットの減算(1−2)で、上位4ビットへのボローが発生するため、H(ハーフキャリー)フラグがセットされます。

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



CMP D命令が終わりました。
次はCMP H命令です。

●CMP H命令の動作の写真です

Aレジスタには21が入ったままです。
Hレジスタには34が入っています。

21と34との比較です。符号無し数として考えると、当然21よりも34の方が大きいですから、C(キャリー)フラグがセットされます。
符号付の数として考えても、21−34の結果は負の数になりますからですから、S(サイン)フラグもセットされます。

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



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

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



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



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

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

ALUレジスタ”A”とALUレジスタ”B”の値は即座に加算されて、ADDレジスタに表示されます。
21+CB+1=EDの計算が行われて、ADDレジスタの表示がEDになりました(減算では必ず+1が加算されます)。

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

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



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



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

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

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



2009.4.16upload

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