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