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