論理回路 

目次


第1節 レジスター

第2節 カウンター

第3節 シフトレジスターとマスタースレーブ型Dフリップフロップ

第4節 乗除算回路


テスト

Logをみる

Back
 

第6章 レジスター類

   第6章 レジスター類

 第4節 乗除算回路

 二進数x を2倍するには、全体を1桁づつ左にずらせば(シフトする)いいのです。そして(11) 倍するには、(10) が2倍、という意味で、(01) が1倍ということですから、そこに(シフトしたものに)元のずらす前のxを足してやればいいのです。

 例えば x=(0010110) とし、y=(00000011)としたとき x×y は

    0010110
    +0010110
-----------------
    01000010

となります。

 同様にy がもっと複雑な場合も、シフトをy の1の桁に対応するものについて必要回数行いそれらを足せばいいのです。

 例えば x=(0010110) とし、y=(00101011)としたとき x×y は

  0010110
   0010110
    0010110
    +0010110
-----------------
0000001110110010

となります。一般には乗算の結果、桁数は2倍に増えます。

 乗算の回路はx をシフトレジスターに入れておき、y をもうひとつのレジスターに入れておき、x をシフトしてはy を足し、またシフトする、ということを繰り返すようにして働きます。

 除算は、次のように行います。x=(01010110) を y=(00011011) で割る場合を例に取ります。まずy を左にシフトしていってx と比べ、x を越えず一番近いようにします。2桁シフトするとx を越えてしまうので1桁だけシフトします。そしてその数をx から引きます。

  01010110
 - 00110110
--------------
  00100000

そしてこれに対し、同じようにy を近くなるようシフトします。この場合は0桁のシフト、すなわちそのままy を引きます。

  00100000
 - 00011011
--------------
  00000101   (1)

シフトした数に対応するところに1を立てた二進数

  00000011

が商になり、(1)が余りになります。実際アクセサリの中の関数電卓の2進モードで確かめることができます。

 このような方法で除算が可能な理由は、次の通りです。まず商(11) と余り(101) について

   x= y*(11) +(101)

が成り立つでしょう。すると、

x - y*(10) -y*(01) =(101) (2)

と変形されます。y*(10) はy を左に1桁シフトする、ということですから、上の(1)を得る過程そのものが(2)式なのです。

 この過程を順序論理回路にすれば除算回路が得られます。シフトしていって、一番近い所を探すのは、シフトしては引き算をしてみて、最初に結果がマイナスになる所を探します。その場所から1桁右の場所が最初に商に1が立つ桁の場所です。

 (差をとってから)以後同じようにして1の立つ場所を探してゆくのです。