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

●STAX命令のクロック毎の動作の写真です

STAX命令とLDAX命令は[第66回]で説明しましたが、まだクロック毎の動作の確認はしていませんでした。
今回はSTAX命令とLDAX命令のクロック毎の動作について説明をすることにします。
STAX命令にはSTAX BとSTAX Dとがあり、LDAX命令にはLDAX BとLDAX Dがあります。
いずれもメモリアドレスを指定するのに、BCレジスタを使うかDEレジスタを使うか、の違いのみで、動作としてはレジスタが違うことを除けは全く同じなので、今回はSTAX DとLDAX Dについて見ていくことにします。

テストに使ったプログラムです。

0000 3EAA    MVI A,AA
0002 113412  LXI D,1234
0005 12      STAX D
0006 3E00    MVI A,00
0008 1A      LDAX D

STAX命令とLDAX命令の動作をよりはっきりと確認できるように、最初にAレジスタに特定の値(ここでは”AA”)を書き込んでおき、DEレジスタにも特定のメモリアドレス(ここでは”1234”)を書き込んでから、STAX Dを実行します。
次にLDAX Dの働きを確認できるように、先に一旦Aレジスタに00を書いて、クリアしておいてから、LDAX Dを実行します。
MVI命令のクロック毎の動作は[第52回]で説明しましたし、LXI命令のクロック毎の動作は[第71回]で説明しましたから、今回はそれらについては写真を省略して、STAX D命令とLDAX D命令の部分についてのみ、写真を使って説明をすることにします。

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

T4の写真です。


PC(プログラムカウンタ)は”0006”になっていて、OPコードレジスタには”12”(STAX DのOPコード)がラッチされていますが、PCADoutが消灯していて、PC(プログラムカウンタ)の値は、外部アドレスバスA15−A0には出力されていません。

STAX命令はこの期間は内部処理だけで外部バスを使いません。
外部アドレスバスA15−A0も外部データバスD7−D0もハイインピーダンスになります。

内部ではDレジスタとEレジスタの値をWKHレジスタとWKLレジスタに移す作業が行われます。

regWRとregRDがともに点灯しています。
s3−s0が”1011”なのでデータの送り手としてEレジスタが選択されます。
またd3−d0が”0111”なのでデータの受け手としてWKLレジスタが選択されます。
s3−s0、d3−d0とレジスタの関係については、「レジスタコード表」([第27回])を参照してください。

EregRDとWKLregWRが点灯していて、Eレジスタの値”34”が内部データバスinnerBUSに出力され、WKLレジスタにも入れられています。

T5の写真です。


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

T6の写真です。


regWRとregRDがともに点灯しています。
s3−s0が”1010”なのでデータの送り手としてHレジスタが選択されます。
またd3−d0が”0110”なのでデータの受け手としてWKHレジスタが選択されます。
s3−s0、d3−d0とレジスタの関係については、「レジスタコード表」([第27回])を参照してください。

HregRDとWKHregWRが点灯していて、Hレジスタの値”12”が内部データバスinnerBUSに出力され、WKHレジスタにも入れられています。

T7の写真です。


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

T8の写真です。


WKselが点灯し、WKレジスタの値”1234”が外部アドレスバスA15−A0に出力されています。
regRDが点灯しS3−S0が”1111”なので、Aレジスタが選択され、AregRDが点灯しています。
Aレジスタの値”AA”が内部アドレスバスinnerBUSに出力され、外部データバスD7−D0も”AA”になっています。
MEMWRが点灯していて、外部データバスD7−D0の値”AA”がメモリアドレス”1234”に書き込まれていることがわかります。

T9の写真です。


MEMWRが消灯し、メモリ書き込み動作が完了しました。

STAX命令はT9で完了します。
次のT10は一瞬で終了し、次の命令のT0になります。
その部分の写真も撮ったのですが、ピンボケになってしまいました。
実質的にはたいして意味のある写真ではありませんから、STAXについてはここで終わりにします。

●LDAX D命令のクロック毎の動作の写真です

T4の写真です。


PC(プログラムカウンタ)は”0009”になっていて、OPコードレジスタには”1A”(LDAX DのOPコード)がラッチされていますが、PCADoutが消灯していて、PC(プログラムカウンタ)の値は、外部アドレスバスA15−A0には出力されていません。

LDAX命令のT4〜T7はSTAX命令と全く同じです。
内部ではDレジスタとEレジスタの値をWKHレジスタとWKLレジスタに移す作業が行われます。

WKレジスタには先に実行したSTAX命令によって、すでにDEレジスタの値”1234”が入っているので、実際にDEレジスタからWKレジスタへのデータの移動が行われていても、それと確認することはできません。
しかし内部データバスinnerBUSをよく見るとデータが動いていることがわかります。

EregRDとWKLregWRが点灯していて、Eレジスタの値”34”が内部データバスinnerBUSに出力され、WKLレジスタにも入れられています。

T5の写真です。


regWR、WKLregWRが消灯しました。

T6の写真です。


DregRDが点灯し、内部データバスinnerBUSに、Dレジスタの値”12”が出力されています。
WKHregWRが点灯し、WKHレジスタに内部データバスの値”12”が書き込まれています。

T7の写真です。


regWR、WKHregWRが消灯しました。

T8の写真です。


WKselが点灯し、WKレジスタの値”1234”が外部アドレスバスA15−A0に出力されています。
MEMRDが点灯し、メモリアドレス”1234”の値”AA”が外部データバスD7−D0に出力されています。
内部データバスinnerBUSも”AA”になっています。

regWRが点灯しd3−d0が”1111”なので、Aレジスタが選択され、AregWRが点灯しています。
Aレジスタに内部アドレスバスinnerBUSの値”AA”が書き込まれています。

T9の写真です。


regWR、AregWRが消灯し、Aレジスタに”AA”がラッチされました。
2008.10.3upload

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