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

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

前回、前々回はJZ命令とJNZ命令のクロック毎の動作を説明しました。
今回はJP命令とJM命令のクロック毎の動作の説明をします。
JP命令はS(サイン)フラグがリセットされている(結果が正の数、プラスである)ときに指定アドレスにジャンプします。
JM命令はS(サイン)フラグがセットされている(結果が負の数、マイナスである)ときに指定アドレスにジャンプします。

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

0000 3E00    MVI A,00
0002 3D      DCR A
0003 F23412  JP 1234
0006 FA7856  JM 5678

DCR A命令が終わってフラグがセットされたあとの、JP 1234命令から、クロック毎の動作を見ていくことにします。

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



最初にAレジスタに00を入れて、それをDCR Aで−1したのですから、結果は”FF”(−1)になって、S(サイン)フラグがセットされ、Z(ゼロ)フラグがリセットされます。

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


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

OPコードレジスタには”F2”(JP命令の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の写真です。


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

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

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

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

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に出力されました。
JM命令の実行が完了し、指定したアドレスにジャンプしました。
2008.10.6upload

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