標準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

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