標準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
前へ
次へ
ホームページトップへ戻る