電子回路のページ/ Previous/ 電子回路のページに戻る
除算は乗算の逆算であるが,演算操作ははるかに複雑である.
以上の方法を一般化し,正の被除数Xから正の除数Yの除算を行う基本的な方法を 図1の流れ図に示す.

被除数Xと除数Yが異符号であっても除算できるように修正したものを 図2に示す. 余りが負になる場合があるので注意が必要である.

このような演算方法では被除数Xや除数Yの数値によって演算速度が著しく異なり, 特に,被除数Xの絶対値が非常に大きく,除数Yの絶対値が1や2のように小さい場合には, 演算速度が遅くなってしまう. そこで,演算速度を高速化するために, 10進法や2進法のような位取りを利用して,被除数Xの各桁の数値に対して計算を行う 演算方法が使用されている.いくつかの方法があるが, 主なものは引放し法と呼ばれる方法と引戻し法と呼ばれる方法である.
次の計算例のように, 除数を引いたときの余りの符号が負になれば, 次の桁では除数を加えていく方法である. 10進数での計算例として41÷3を考える.

10の位の数4から除数3を引くと,4−1=1となる. この操作をステップ1とする. ステップ1の結果として得られる数1から除数3を引くと,1−3=−2となる. この操作をステップ2とする.これで10の位の計算を終え,10の位に ステップ1,2のステップ数2から 商2をたてる.ステップ2の結果得られる数−2を10倍して1の位の数1と 加えると,−2×10+1=−19となる. −19から除数3を加えると,−19+3=−16となる. この操作を再度ステップ1とする. ステップ1の結果得られる数−16から除数3を加えると,−16+3=−13となる. この操作をステップ2とする. ステップ2の結果得られる数−13から除数3を加えると,−13+3=−10となる. この操作をステップ3とする. ステップ3の結果得られる数−10から除数3を加えると,−10+3=−7となる. この操作をステップ4とする. ステップ4の結果得られる数−7から除数3を加えると,−7+3=−4となる. この操作をステップ5とする. ステップ5の結果得られる数−4から除数3を加えると,−4+3=−1となる. この操作をステップ6とする. ステップ6の結果得られる数−1から除数3を加えると,−1+3=2となる. この操作をステップ7とする. これで1の位の計算を終え,1の位にステップ1〜7のステップ数7から 商−7をたてる. 結局,10の位の商2と1の位の商−7から,2×10−7×1=13が 41÷3の商となる. また,余りは1の位のステップ7の結果得られる2である.
なお,最後に余りが負になる場合があるため, その場合には補正が必要である.
引放し法で2進数の除算を行うと,各桁には0か1の数しかないので, 1つの桁に対しては1回の除数の減算または加算を行うだけでよい. 2進数での計算例として(00101111)2÷(0010)2 を考える.

通常の筆算で除算を行う方法で,次の計算例のように被除数Xの上位桁 から順に除数Yを引き,もし引けたら商に1をたて,引けなければ商に0をたて, 次の桁に進んでいくものである. 最後に商Qと余りRが得られる.

8ビットの除算回路の例を示す. 除算方法には引戻し法を用いる. 除算回路には,除数Yを格納する4ビットのMレジスタと 被除数Xの上位4桁を格納するAレジスタと下位4桁を格納するQレジスタ が設けられている. 除算の演算操作により最終的にAレジスタに余りが残り,Qレジスタに商が残る.

Qレジスタは4ビットのレジスタであるので, 被除数Xの上位4ビット部は除数Yより小さくなければならないという制約がある. もし被除数Xの上位4ビット部が除数Yより大きいか等しいならば, 発生した商1が4ビットのQレジスタに納まらなくなってしまい 正しい商が得られなくなるからである. 図7に順序回路方式の回路構成と流れ図を示す. なお,並列減算器の符号桁は,0であるときに正の数, 1であるときに負の数を表している. また,流れ図において,〔A〕はAレジスタの内容を表しており, 〔M〕はMレジスタの内容を表している.

具体例として(00101110)2÷(0100)2で説明する. 被除数X=00101110の上位4ビットをAレジスタに, 下位4ビットをQレジスタに,除数Y=0100をMレジスタに格納して除算を開始する. 被除数Xの上位4桁については制約が課せられているため, 初めにA,Qレジスタの内容を左に1ビットシフトする. Aレジスタの内容は(0101)2となり, Qレジスタの内容は(1100)2となる. Aレジスタの内容(0101)2から 除数Y(0100)2の減算を行う. その結果(0001)2が正になるので,A,Qレジスタの LSBに商の1を入れ,その結果(0001)2をAレジスタに入れる. したがって,Aレジスタの内容は(0001)2となり, Qレジスタの内容は(1101)2となる. 次にA,Qレジスタの内容を左に1ビットシフトする. Aレジスタの内容は(0011)2となり, Qレジスタの内容は(1010)2となる. Aレジスタの内容(0011)2から除数Y(0100)2の減算を行うと,負になるから,A,QレジスタのLSBに 商の0を入れ,Aレジスタの内容をそのままの状態(0011)2にする. したがって,Aレジスタの内容は(0011)2となり, Qレジスタの内容は(1010)2となる. さらにA,Qレジスタの内容を左に1ビットシフトする. Aレジスタの内容は(0111)2となり, Qレジスタの内容は(0100)2となる. Aレジスタの内容(0111)2から除数Y(0100)2の減算を行う. その結果(0011)2が正になるので,A,Qレジスタの LSBに商の1を入れ,その結果(0011)2をAレジスタに入れる. したがって,Aレジスタの内容は(0011)2となり, Qレジスタの内容は(0101)2となる. さらにA,Qレジスタの内容を左に1ビットシフトする. Aレジスタの内容は(0110)2となり, Qレジスタの内容は(1010)2となる. Aレジスタの内容(0110)2から 除数Y(0100)2の減算を行う. その結果(0010)2は正になるので, A,QレジスタのLSBに商の1を入れ,その結果(0010)2を Aレジスタに入れる. Aレジスタの内容は(0010)2となり, Qレジスタの内容は(1011)2となる. 4回シフトをしているので,ここで演算操作を終了する. Qレジスタの内容(1011)2が商であり, Aレジスタの内容(0010)2が余りである.
2004/6/21
制作 須田隆良 E-mail knxkg921@ybb.ne.jp