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

●POP命令の説明です

POP命令は、前回説明したPUSH命令の逆の動作をする命令です。
スタックにレジスタの値を保存しながらスタックポインタの値をカウントダウンしていく、push downに対して、スタックから値をレジスタに読み込みながら、スタックポインタの値をカウントアップしていく、pop upです。
POP命令には、PUSH命令と同様、対象となるレジスタによって、下記の4命令があります。

POP B      BレジスタとCレジスタにスタックから値を読み込みます
POP D      DレジスタとEレジスタにスタックから値を読み込みます
POP H      HレジスタとLレジスタにスタックから値を読み込みます
POP PSW   Aレジスタとフラグレジスタにスタックから値を読み込みます

各命令の命令コードは次の通りです。

命令コード(2進数)   命令コード(16進数)  ニーモニック    
110000001          C1          POP B
110100001          D1          POP D
111000001          E1          POP H
111100001          F1          POP PSW

PUSH命令と同様に、命令コードのbit5とbit4が00のときに、BCレジスタ、01のときにDEレジスタ、10のときにHLレジスタ、11のときにAレジスタとフラグレジスタを対象とするPOP命令になります。

●POP命令の動作

[第67回]でスタックとPUSH命令の関係について説明しました。
PUSH BとPUSH Dを続けて実行したところ、SP(スタックポインタ)の値と、スタック(メモリ)の内容が下のようになりました。

この状態のときに、POP命令を使うとどのようになるかを説明します。

上図のように、SP(スタックポインタ)はF7FCになっています。
ここで、例として
POP H
を実行してみます。

POP H命令の実行によって、SP(スタックポインタ)が示しているメモリアドレスF7FC番地の値01がLレジスタに入れられます。
スタックポインタは+1されてF7FDになり、そのメモリアドレスの値EFがHレジスタに入れられ、スタックポインタはさらに+1されてF7FEになります(下図)。


PUSH命令とPOP命令は、レジスタ→メモリ、メモリ→レジスタというように、レジスタの値を一時的にスタックというメモリ領域に退避させることが主たる目的ですから、通常は、PUSH命令で指定したレジスタをPOP命令でも指定して、同じレジスタにもとのままのデータを戻すように使います。

しかし、いつもそうしなければならない、というものではありません。
もし必要であれば、上の例のように、PUSH Dで保存したDEレジスタの値を、POP HでHLレジスタに入れる、というプログラムを書くこともできます。

●POP命令のタイミングチャートです



今までの説明では、先に回路図をお見せしていましたが、タイミングチャートを先に見てから、あとで回路図を見るようにした方が、より理解しやすくなると思いますから、今後は先にタイミングチャートの説明から入ることにします。

POP命令は、PUSH命令とは全く逆の動作になります。
現在のスタックポインタが示すメモリアドレスの値を読んで、下位レジスタに書き込みます。
次にスタックポインタを+1して、そのメモリアドレスの値を読んで、上位レジスタに書き込みます。
最後にもう一度、スタックポインタの値を+1カウントアップします。

●POP命令の回路図です



回路としては簡単なもので、PUSH命令の回路とよく似ています。

PUSH命令と同じように、
B〜Lレジスタはop5、op4をそのままd2、d1に出力し、B、D、Hレジスタに対しては、さらにd0を0にすることで選択されます。

op5、op4が11のときにはAレジスタ、フラグレジスタに対するPOP命令になります。
そこで、PUSH命令の回路と同じように、op5、op4が11のときとそうでないときとで、d3〜d0を出力する回路を分けるようにしています。

●2枚目の基板の追加配線作業が完了しました

こんなすごいことになってしまいました。


ふつう製品基板を作る目的での試作でしたら、これだけ追加配線が必要なら、もうこの基板に手を加えるのはやめて、もう一度試作基板を作りなおします。
しかし、今回は、考えた回路通りに動作するかどうかを確認するのが一番の目的ですから、極端なことを言えば、蛇の目基板に手配線をしてもよいのです。

ま、もっとも最初はひょっとしたらこのまま組立キットにして売り出そうか、などという考えもありましたので、とにかくプリント基板で試作してみることにしたのです。
結局のところ、余りにICの数が多くなってしまったことから、このまま組立キットにするのはムリだと判断しましたから、それなら、もうこの試作基板は、どれだけ追加配線でぐちゃぐちゃになってしまっても、回路の評価ができれば、目的は達成できます。

とは言うものの…。
これは、さすがにきびしい…。

多分、回路設計の段階でのミスや考え違いがあるでしょうし、その上に、回路パターン作成時の配線ミスも出てくるでしょう。
その上さらに、このスパゲッティ状の追加配線ですから、この配線ミスもからんでくるとなると、完動するまでには、かなり時間がかかるかもしれません。
まあ、あせらずに、少しずつテストしながら、また命令ごとの写真をご披露していくことにいたします。
2008.9.17upload

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