標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第168回]
●RLC、RRC、RAL、RARの各命令の説明です
RLC、RRC、RAL、RARはAレジスタを1ビット左または右に回転させる命令です。
ここで、TTLロジックでは一般的なシフトという表現ではなくて、回転(Rotate)という表現をしたのは、単純なシフトではなくて、まさに回転するからです。
まずは各命令のマシン語命令コードから説明を始めます。
ニーモニック マシン語コード(2進数) マシン語コード(16進数) Intel社8080マニュアルでの説明(英語)
RLC 00000111 07 Rotate left
RRC 00001111 0F Rotate right
RAL 00010111 17 Rotate left through carry
RAR 00011111 1F Rotate right through carry
各命令の動作です。
RLCはAレジスタの値を1ビット左(A7が左側、A0が右側です)にシフトします。A7の値はA0に入ります。このときA7の値がC(キャリー)フラグにも入れられます。
RRCはAレジスタの値を1ビット右にシフトします。A0の値はA7に入ります。このときA0の値がC(キャリー)フラグにも入れられます。
RALはAレジスタとC(キャリー)フラグをつないで、仮に9ビットのレジスタとしたうえで、全体を1ビット左に回転します。A7の値がCフラグに入り、Cフラグの値がA0に入れられます。
RARはAレジスタとC(キャリー)フラグをつないで、仮に9ビットのレジスタとしたうえで、全体を1ビット右に回転します。A0の値がCフラグに入り、Cフラグの値がA7に入れられます。
いずれの命令も、実行の結果、C(キャリー)フラグのみ変化します。
8080のローテイト命令は以上の4命令だけで、Aレジスタに対してのみ働きます(Z80では、B〜Lやメモリに対しても働く拡張命令が追加されています)。
●RLC、RRC、RAL、RARのタイミングチャートです
タイミングチャートは割とシンプルです(回路は、なかなか大変です)。
T4でAレジスタの値を、4ビットのシフトレジスタ74HC194を2個直列につないだ、ローテイト用レジスタにセットします(74HC194はs0、s1がHのときに、CLKを入れることで、値をロードします)。
それと同時に現在のC(キャリー)フラグの状態を一時的に保存します。
こうしておいて、次のT6で74HC194を1ビットシフトします。
T8でシフトレジスタの値をAレジスタに書き込みます。
Cフラグは、ローテイト前のA7またはA0の値によってセット、リセットされますから、T4のタイミングで現在のCフラグの状態を一時保存すると同時に、新しい値に書き換えます。
●RLC、RRC、RAL、RARの回路図です
ご覧いただいての通り、タイミングチャートからは想像がつかないほど、なかなかに複雑な回路です。
回路図を見ると、ちょっと変わった感じのゲートICがあります。
74HC51です。
4000シリーズなどのCMOS ICでは、ごく普通なのですが、74HCではちょっと珍しいタイプです。
2つのANDゲートの出力がICの内部でNORゲートの入力になっていて、ICの入出力端子は、そのANDゲートの入力端子とNORゲートの出力端子になっています。
1つのICには、2組のAND−NORゲートが入っています。
ANDゲートは1組は2入力ですが、もう1組は3入力になっています。
参考までに、74HC51のデータシートをお見せします。
それとシフトレジスタ74HC194のデータシートも見ていただくことにいたします。
●74HC51のデータシート(部分)です
[出典]National Semiconductor社MM74HC51datasheet
●74HC194のデータシート(部分)です
[出典]National Semiconductor社MM74HC51datasheet(赤線は筆者)
割と平易でわかりやすい英文ですから、読んでいただければ、動作は理解できると思います。
あれ。ミスプリントがありますね。
Function Tableです。ModeはS1、S0のはずなのですが、S0の代わりにS2になっています。誤植でしょうね。
本文を要約しますと、
1)パラレルデータをA、B、C、Dに入力して、S1、S0をHにしておいて、Clockにパルスを与えると、↑のタイミングでA〜Dがロードされ、ラッチされてQA〜QDから出力されます。
2)S1がL、S0がHのときに、Clockにパルスを与えると、↑のタイミングで出力が1ビットQA→QDに右シフトして固定します。このときR入力がQAにラッチされて、出力されます。
3)S1がH、S0がLのときに、Clockにパルスを与えると、↑のタイミングで出力が1ビットQD→QAに左シフトして固定します。このときL入力がQAにラッチされて、出力されます。
本文の説明にも、赤のアンダーラインをつけましたが、TTL(74HCも同じ)での、Right、Leftは、8080などのビット表現とは、左右が逆になっています。
74HC194での「右シフト」は、8080のローテイト命令では「左ローテイト」に相当し、74HC194での「左シフト」は、8080のローテイト命令では「右ローテイト」に相当します。
頭がこんがらがってしまいそうですが、そういうことになっていますので、そのあたりに注意して、回路図を見るようにしてください。
次回は、回路図の説明をする予定です。
2009.2.22upload
前へ
次へ
ホームページトップへ戻る