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

●条件JMP命令のクロック毎の動作の写真です

JMP命令のクロック毎の動作については、[第76回]で説明しました。
条件JMP命令の回路やタイミングチャートは[第62回]および[第63回]で説明しましたが、まだクロック毎の動作の確認はしていませんでした。
条件JMP命令は、条件が成立したときの動作はふつうのJMP命令と同じになります。
条件が成立しないときにはただ命令を読み込むだけで何も実行せずに、次の命令の読み込み動作に進みます。

条件JMP命令は、特定のフラグがセットされているかリセットされているかによって指定アドレスにジャンプするか、そのまま何もしないで次の命令に進むか、のいずれかの動作をする命令です。

条件JMP命令の種類([第63回])です。
命令に関係するフラグは、S(サイン)フラグ、Z(ゼロ)フラグ、P(パリティ)フラグ、C(キャリー)フラグです。
このうち、P(パリティ)フラグとC(キャリー)フラグについては、まだセット、リセットに影響する命令まで説明が進んでいません。
S(サイン)フラグとZ(ゼロ)フラグはINR命令、DCR命令によってセット、リセットされます。

条件JMP命令は、関係するフラグによって、命令コードが異なっているだけで、動作は全部同じですから、ここではS(サイン)フラグに関係するJP命令、JM命令とZ(ゼロ)フラグに関係するJZ命令、JNZ命令について、クロック毎の動作を見ていくことにします。

●JZ命令のクロック毎の動作の写真です(1)

動作の確認をするために次のプログラムを実行させました。

0000 3E00    MVI A,00
0002 3D      DCR A
0003 CA3412  JZ 1234
0006 C27856  JNZ 5678

MVI命令は[第50回]で、DCR命令は[第81回]で、クロック毎の動作を説明済みです。
そこで、今回はDCR A命令が終わってフラグがセットされたあとの、JZ 1234命令から、クロック毎の動作を見ていくことにします。
JZ命令も、JNZ命令もT0〜T3は省略します。

●DCR A命令実行後のフラグの状態です



最初にAレジスタに00を入れて、それをDCR Aで−1したのですから、結果は”FF”(−1)になって、S(サイン)フラグがセットされ、Z(ゼロ)フラグはリセットされます。
[注意]最初にMVI A,00を実行しても、Z(ゼロ)フラグはセットされません(変化しません)。次にDCR Aが実行されると、Z(ゼロ)フラグは(もしセットされていたなら)クリアされます。

JZ 1234命令のT4の写真です。


JZ命令のクロック毎の動作については、条件JMP命令(条件不成立の時)のタイミングチャート([第63回])を参照しながら写真を見ると、わかりやすいと思います。

OPコードレジスタには”CA”(JZ命令のOPコード)がラッチされています。
PC(プログラムカウンタ)は”0004”になっていて、PCADoutが点灯していて、PC(プログラムカウンタ)の値が、外部アドレスバスA15−A0に出力されています。

MEMRDが点灯していて、メモリアドレス”0004”の値”34”が外部データバスD7−D0に出力されています。
内部データバスinnerBUSも”34”になっています。
regWRが点灯していて、d3−d0が”0111”なのでWKLレジスタが選択されます。
WKLregWRが点灯していて、WKLレジスタに内部データバスの値”34”が読み込まれています。

d3−d0とレジスタの関係については、「レジスタコード表」([第27回])を参照してください。

T5の写真です。


regWR、WKLregWRが消灯し、WKLレジスタに、内部データバスの値”34”がラッチされました。
PCclkが点灯しました。

T6の写真です。


PC(プログラムカウンタ)は”0005”になりました。
PC(プログラムカウンタ)の値が、外部アドレスバスA15−A0に出力されています。

MEMRDが点灯していて、メモリアドレス”0005”の値”12”が外部データバスD7−D0に出力されています。
内部データバスinnerBUSも”12”になっています。
regWRが点灯していて、d3−d0が”0110”なのでWKHレジスタが選択されます。
WKHregWRが点灯していて、WKHレジスタに内部データバスの値”12”が読み込まれています。

T7の写真です。


regWR、WKHregWRが消灯しました。
WKHレジスタに”12”がラッチされました。
PCclkが点灯しました。

T8の写真です。


Z(ゼロ)フラグがセットされていないため、JZ命令は実行されません。T8は一瞬で終わって次の命令のT0になります。
PC(プログラムカウンタ)は”0006”になりました。
外部アドレスバスA15−A0にPCの値が出力され、外部データバスD7−D0にメモリアドレス”0006”の値”C2”が出力されています。
”C2”はJNZ命令のOPコードです。

●JNZ命令のクロック毎の動作の写真です(1)

今度のJNZ命令は条件が成立するので通常のJMP命令と同じ動作になります。
JMP命令のタイミングチャート([第61回])を参照しながら写真を見てください。

T4〜T7はJZ命令と全く同じですから、説明は省略します。

T4の写真です。


T5の写真です。


T6の写真です。


T7の写真です。


T8の写真です。


条件が成立したため、WKレジスタの値がPC(プログラムカウンタ)に送られます。
regRDとregWRが両方とも点灯しています。
s3−s0が”0111”なのでデータの送り手としてWKLレジスタが選択されます。
WKLregRDが点灯して、WKLレジスタの値”78”が内部データバスinnerBUSに出力されています。
d3−d0が”0011”なのでデータの受け手としてPCL(プログラムカウンタの下位8ビット)が選択されます。
PCLregWRが点灯して、内部データバスの値”78”がPC(L)レジスタに読み込まれています。

s3−s0、d3−d0とレジスタの関係については、「レジスタコード表」([第27回])を参照してください。

T9の写真です。


regWR、PCLregWRが消灯しました。
PC(L)レジスタに”78”がラッチされました。

T10の写真です。


regRDとregWRが点灯しています。
s3−s0が”0110”なのでデータの送り手としてWKHレジスタが選択されます。
WKHregRDが点灯して、WKHレジスタの値”56”が内部データバスinnerBUSに出力されています。
d3−d0が”0010”なのでデータの受け手としてPCH(プログラムカウンタの上位8ビット)が選択されます。
PCHregWRが点灯して、内部データバスの値”56”がPC(H)レジスタに読み込まれています。

T11の写真です。


regWR、PCLregWRが消灯しました。
PC(H)レジスタに”56”がラッチされました。

T12(次の命令のT0)の写真です。


T12は一瞬で終了し、次の命令のT0になります。
PCADoutが点灯し、PC(プログラムカウンタ)の新しい値”5678”が外部アドレスバスA15−A0に出力されました。
JNZ命令の実行が完了し、指定したアドレスにジャンプしました。
2008.10.4upload

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