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

●条件JMP命令

8080の条件JMP命令は全部で8命令あります。
マシン語コードとニーモニックとで示します。

命令コード ニーモニック
11111010 JM adrs
11110010 JP adrs
11101010 JPE adrs
11100010 JPO adrs
11011010 JC adrs
11010010 JNC adrs
11001010 JZ adrs
11000010 JNZ adrs

adrsは16ビットの値で、条件が成立したときにジャンプする、飛び先のメモリアドレスです。
命令コードの次のメモリアドレスに、ジャンプ先アドレスの下位バイトを置き、さらにその次のメモリアドレスに、ジャンプ先アドレスの上位バイトを置きます(上位バイト・下位バイトの順ではなくて、逆の下位バイト・上位バイトの順です)。

たとえば、アセンブラニーモニックで、

JNZ 1234

と書くと、この命令は、(直前に行われた計算の結果が)ゼロではないとき(Zフラグがセットされていないとき)は、1234番地にジャンプせよ、という命令になります。
この命令がメモリの0020番地から書かれている場合の、命令コードに続くジャンプ先アドレスデータの格納の仕方を次に例示します。

アドレス  2進数      16進数  ニーモニック
0020   11000010   C2       JNZ
0021   00110100   34      (下位アドレス)
0022   00010010   12      (上位アドレス)

条件が成立したときは、普通のJMP命令と同じ動作になります。
ですから前回[第62回]のJMP命令の回路図では、JMP命令とJX(条件JMP命令)とをORで同じ回路にしているのです。

では、条件JMP命令で条件が成立しなかったときは、どうなるのでしょうか?

●条件JMP命令(条件不成立のとき)のタイミングチャート



条件が不成立のときは、命令コードに続く、ジャンプ先アドレス2バイトを読んだだけで、何もしないでその次の命令を実行します。

さきほど条件JMP命令は普通のJMP命令と同じ動作をするので、回路は同じにしている、と書きました。
それなら、どこで条件の判断をして、ジャンプする、しない、の分岐をするのでしょうか?

もう一度、前回のJMP命令の回路図をよく見てください。
右下のAND(オープンドレイン出力のNAND)がずらりと並んだところで条件分岐をさせているのです。
このAND回路はすこし変わった組み合わせになっています。
条件が成立したときのANDではなくて、不成立のときのANDなのです。

NANDゲートの片方の入力は命令コードのビット5〜3をデコードして、条件(NZ、Z、NC、C…)ごとにアクティブHになるようにした74HC238回路からの信号が入っています(そのデコード回路は[第61回]の2枚目の基板のデコード回路図の右下方にあります)。

NANDゲートのもう一方の入力はフラグレジスタからの出力信号です。
フラグレジスタからは、条件成立のときにHになる信号と、逆に条件が不成立のときにHになる信号がでています([第59回]フラグレジスタの回路図を参照してください)。
たとえばZフラグは計算後の値がゼロの時にセットされます。
そのときにZFフラグはHになりますが、ZF_信号はZF信号の逆に、結果がゼロではないとき(Zフラグがリセットされたとき)にHになります。

さて、では、もう一度、JMP命令の回路図に戻って、たとえば一番下にある、NZのNANDを見てみると、片方の入力がNZ(JMP条件:結果がゼロではないとき)なのに、もう片方の入力はZF(ゼットのときにH)になっています。
つまりこのNANDゲートは、JMP命令の条件が不成立のときにアクティブ(L)を出力します。その出力はマシンクロックカウンタのクリアパルス(Mclr)です。

もう一度、[第61回]の2枚目の基板のデコード回路図を見てください。
命令コードのビット5〜3をデコードして、条件信号を出力している74HC238のpin4、pin5の前には、NANDゲートがあって、条件JMP命令(JX)のセレクト信号と、T8がNANDの入力になっています。
つまり条件信号(NZ、Z、NC、C…)は、JX命令のときのマシンサイクルT8のときだけアクティブになるのです。

以上の回路によって、条件JMP命令がデコードされると、その条件が不成立の場合には、T8サイクルでMclr信号が出力されるため、マシンクロックカウンタが0に戻り、JMP命令の動作(指定アドレスへのジャンプ)をすることなく、次の命令のOPコードフェッチサイクルになります。

●2枚目の基板に部品を全部実装しました



こちらは基板の裏側です。

かなり追加配線していますが、まだまだこんなものでは終わりそうにありません(果たして、本当にちゃんと動作してくれるでしょうか…?)。
2008.9.10upload

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