web-dev-qa-db-ja.com

非復元除算アルゴリズム

非復元除算を使用して符号なし2進整数を除算する手順を知っている人はいますか?

オンラインで良い情報源を見つけるのは難しいです。

つまり、A = 101110およびB = 010111の場合

非復元部門でA divided by Bを見つけるにはどうすればよいですか?各ステップのレジスタはどのように見えますか?

ありがとう!

8
CyberShot

(私の答えは少し遅れていますが、将来の訪問者に役立つことを願っています)

非復元除算のアルゴリズムを下の画像に示します。

enter image description here

この問題では、配当(A)= 101110、つまり46、除数(B)= 010111、つまり23です。

初期化:

_Set Register A = Dividend = 000000
Set Register Q = Dividend = 101110
( So AQ = 000000 101110 , Q0 = LSB of Q = 0 )
Set M = Divisor = 010111, M' = 2's complement of M = 101001
Set Count = 6, since 6 digits operation is being done here.
_

この後、以下の表に示したアルゴリズムを開始します。

テーブルでは、SHL(AQ) denotes shift left AQ by one position leaving Q0 blank

同様に、Q0の位置にある正方形の記号は、_it is to be calculated later_を示します。

enter image description here

すべてのステップが表から明確であることを願っています!!!

20
Abid Rahman K

1)レジスタAの値を0(Nビット)に設定します。
2)レジスタMの値を除数(Nビット)として設定します。
3)レジスタQの値を被除数(Nビット)として設定します。
4)AをQ {A、Q}と連結します
5)次の「N」回を繰り返します(ここで、Nは除数のビット数です)。
Aの符号ビットが0に等しい場合、
シフトAとQを1ビット左に組み合わせて減算 AからM、
それ以外の場合、シフトAとQを1ビット左に結合し、add M to A
Aの符号ビットが0の場合は、Q [0]を1に設定し、そうでない場合はQ [0]を0に設定します。
6)最後に、Aの符号ビットが1に等しい場合は、MをAに追加します。
7)Aを剰余として、Qを商として割り当てます。

1
Jhashank Gandhi