標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第191回]
●こんどこそ本当に、ADD、SUB、CMP命令の回路の説明です
ずいぶんと時間がたってしまいましたが、こんどこそ本当に、算術演算命令(ADD、SUB、CMP)の回路の説明をいたします。
[第179回]で、論理演算命令(AND、OR、XOR)も、算術演算命令も、ほとんどが共通の回路になっている、という説明をしました。
もちろん、全部が共通ではありません。
算術演算回路が、論理演算回路と大きくことなっているところは、加算回路(Adder)があるというところです。
これが、その加算回路です。
4bitの加算器(Full Adder)74HC283を2個使っています。
74HC283は[第131回]と[第132回]で説明をしていますので、忘れてしまわれた方は、そちらのページをもう一度ご参照ください。
[第179回]で説明した、ALUのレジスタ”A”とレジスタ”B”からの出力を加算して、その結果をただちに出力します。
加算結果の出力は、74HC244でゲートされています。
ADDrd信号をアクティブにすると、加算結果が内部データバスに出力されます。
じつに簡単で、もうそのまんま、という回路です。
しかし、そのまんま、ではない回路がくっついています。
加算に加えられる、下位桁からのキャリーと、加算の結果出力される上位桁へのキャリーの処理です。
回路を見ていただければわかりますように、これがなかなかに大変な回路なのです。
どうしてこんなに面倒な回路になっているかといいますと、算術演算の命令は、その命令ごとにキャリーの処理が異なっているからです。
各命令によって異なるキャリーフラグの処理をコントロールするために、命令コードの特定ビットを、そのスイッチに使っています。
加算前のキャリーフラグの処理と、加算後のキャリーフラグの処理は、それぞれ同じ1個の74HC157を利用して行っています。
74HC157は2to1 data selectorです。
pin1入力のH/Lによって、A入力、B入力のいずれかを選択してYから出力します。
1個のICに4組のセレクタが入っています。
●74HC157のデータシート(部分)です
[出典]Texas Insturuments社SN74HC157DataSheet
●算術演算命令の命令コード
ALU演算命令の命令コードについては[第179回]で説明しましたが、ずいぶんと時間がたってしまいましたので、もう一度説明をすることにいたします。
ADD、ADC、SUB、SBB、ANA、XRA、ORA、CMPは、命令コードの上位2ビットが10の命令群です。
ニーモニック | 命令コード |
ADD | 10 000 sss |
ADC | 10 001 sss |
SUB | 10 010 sss |
SBB | 10 011 sss |
ANA | 10 100 sss |
XRA | 10 101 sss |
ORA | 10 110 sss |
CMP | 10 111 sss |
sssはレジスタA〜L、M(メモリ)を示す、000〜111の値
そして、ADD〜CMPは、命令コードのOP5〜OP3の3ビットによって選択されます。
このなかで、ANA〜ORAの3命令は論理演算命令で、すでに説明済みです。
今回は残る5つの命令ADD、ADC、SUB、SBB、CMPについての説明です。
8080の算術演算はこのほかにもあります。
レジスタではなくて、定数とAレジスタの間の演算をおこなう、ADI、ACI、SUI、SBI、CPIです。
ADI〜CPIは、上位2ビットが11で、かつ下位3ビットが110の命令群です。
ニーモニック | 命令コード |
ADI | 11 000 110 |
ACI | 11 001 110 |
SUI | 11 010 110 |
SBI | 11 011 110 |
ANI | 11 100 110 |
XRI | 11 101 110 |
ORI | 11 110 110 |
CPI | 11 111 110 |
ADI〜CPIが、命令コードのOP5〜OP3の3ビットによって選択されることは、ADD〜CMPと同じです。
以上の10個の命令は、キャリーの扱いによって整理すると、(1)ADDとADI、(2)ADCとACI、(3)SUBとSUI、(4)SBCとSBI、(5)CMPとCPI、の5組に整理されます。
なお、最後のCMPとCPIは、SUB、SUIと動作は同じですが、結果はフラグのみ変化して、Aレジスタには影響を与えないところが、SUB、SUIと違っています。
さて、この5組の動作の違いが回路にどのように反映されているか、そこのところをどうやって説明しようか、悩んでいます。
先に、もうひとつ、回路図を見せてしまいます。
論理演算と同じように、算術演算にも固有の回路部分があります。
その回路図です。
本日もどうやら時間がなくなってしまいそうです。
説明の続きはまた次回、ということにさせていただいて、タイミングチャートだけ、ばさっばさっと、お見せすることにいたします。
●ADD命令、ADC命令、ADI命令、ACI命令のタイミングチャートです
●SUB命令、SBB命令、SUI命令、SBI命令のタイミングチャートです
●CMP命令、CPI命令のタイミングチャートです
2009.3.25upload
前へ
次へ
ホームページトップへ戻る