📜  计算机组织 |布斯算法

📅  最后修改于: 2021-09-28 10:50:58             🧑  作者: Mango

布斯算法给出了一种以有效方式乘以带符号 2 的补码表示的二进制整数的过程,即所需的加法/减法次数较少。它基于这样一个事实,即乘法器中的 0字符串不需要加法而只需移位,乘法器中的 1字符串从位权重 2^k 到权重 2^m 可以被视为 2^(k+1 ) 到 2 ^米。

与所有乘法方案一样,布斯算法需要检查乘法器位和部分乘积的移位。在移位之前,被乘数可以按照以下规则加到部分乘积中,从部分乘积中减去,或者保持不变:

  1. 在乘数中遇到字符串1 中的第一个最低有效 1 时,从部分乘积中减去被乘数
  2. 在乘数中遇到字符串0 中的第一个 0(前提是前面有一个“1”)时,将被乘数添加到部分乘积中。
  3. 当乘数位与前一个乘数位相同时,部分乘积不会改变。

Booths 算法的硬件实现——Booth 算法的硬件实现需要如下图所示的寄存器配置。

布斯算法流程图——

我们将寄存器分别命名为 A、B 和 Q、AC、BR 和 QR。 Qn 指定寄存器 QR 中乘法器的最低有效位。一个额外的触发器 Qn+1 被附加到 QR 以方便乘法器的双重检查。 展位算法的流程图如下所示。

AC 和附加位 Qn+1 最初被清除为 0,并且序列 SC 被设置为一个数 n,该数等于乘法器中的位数。检查 Qn 和 Qn+1 中乘法器的两位。如果两位等于 10,则表示已遇到字符串中的第一个 1。这需要从 AC 中的部分乘积中减去被乘数。如果这 2 位等于 01,则表示已遇到字符串0 中的第一个 0。这需要将被乘数添加到 AC 中的部分乘积。

当两位相等时,部分乘积不会改变。不会发生溢出,因为被乘数的加法和减法是相互跟随的。因此,相加的 2 个数字始终具有相反的符号,这是一种排除溢出的条件。下一步是将部分乘积和乘数(包括 Qn+1)右移。这是一种算术右移 (ashr) 运算,其中 AC 和 QR 向右移动,并且 AC 中的符号位保持不变。序列计数器递减,计算循环重复 n 次。

示例 –下面给出了 n = 4 时的 Booth 算法的数值示例。它显示了 -5 和 -7 的逐步乘法。

MD = -5 = 1011, MD = 1011, MD'+1 = 0101
MR = -7 = 1001 
The explanation of first step is as follows: Qn+1                             
AC = 0000, MR = 1001, Qn+1 = 0,  SC = 4   
Qn Qn+1 = 10    
So, we do AC + (MD)'+1, which gives AC = 0101
On right shifting AC and MR, we get
AC = 0010, MR = 1100 and Qn+1 = 1 
OPERATION AC MR Qn+1 SC
0000 1001 0 4
AC + MD’ + 1 0101 1001 0
ASHR 0010 1100 1 3
AC + MR 1101 1100 1
ASHR 1110 1110 0 2
ASHR 1111 0111 0 1
AC + MD’ + 1 0010 0011 1 0

产品计算如下:

Product = AC MR
Product = 0010 0011 =  35

最佳情况和最坏情况发生:
最好的情况是当乘法器中有一大块连续的 1 和 0 时,这样发生的逻辑运算次数最少,如加法和减法。

最坏的情况是当乘法器中有成对的交替 0 和 1(01 或 10)时,因此需要最大数量的加法和减法。

GATE 练习题 –

  1. 门 IT 2008 |第 40 题
  2. 门 IT 2006 |第 38 题
  3. 门 IT 2005 |问题 8
  4. 门 CS 1996 |问题 23