📅  最后修改于: 2020-12-29 11:34:00             🧑  作者: Mango
展位算法是一种乘法算法,使我们可以将两个有符号的二进制整数分别乘以2的补码。它还可用于加快乘法过程的性能。这也是非常有效的。它适用于乘法器中的字符串位0,不需要额外的位,只需将最右边的字符串位和1的字符串移至乘法器位权重2 k到权重2 m (可以认为是2 k + 1-2 m)中。
以下是Booth算法的图形表示:
在上面的流程图中,最初, AC和Q n + 1位设置为0,并且SC是一个序列计数器,代表设置了n的总位,该位数等于乘法器中的位数。有BR表示被乘数位, QR表示乘数位。此后,我们遇到了乘法器的两位,即Q n和Q n +1 ,其中Qn代表QR的最后一位,而Q n +1代表Qn的递增位1。假设乘法器的两位相等至10;这意味着我们必须从累加器AC的部分积中减去乘数,然后执行算术移位运算(ashr)。如果两个乘数等于01,则意味着我们需要对累加器AC中的乘积与乘积进行加法运算,然后执行算术移位运算( ashr ),其中包括Q n +1 。布斯算法中使用算术移位运算将AC和QR位右移一位,并使AC中的符号位保持不变。序列计数器不断递减,直到重复计算循环为止,等于位数(n)。
布斯算法中使用两种方法:
它将二进制数的最右边的位移位,然后将其添加到二进制位的开头。
它将两个二进制位相加,然后将结果右移1位。
示例:0100 + 0110 => 1010,将二进制数相加后,将每个位向右移动1,然后将结果的第一位放在新位的开头。
示例:使用Booth的乘法算法将两个数字7和3相乘。
安斯。这里我们有两个数字7和3。首先,我们需要将7和3转换为二进制数,例如7 =(0111)和3 =(0011)。现在将7(在二进制0111中)设置为被乘数(M),将3(在二进制0011中)设置为乘数(Q)。 SC(Sequence Count)表示位数,这里我们有4位,因此将SC设置为4。此外,它还显示了展位算法的迭代周期数,然后循环运行SC = SC-1次。
Qn | Qn + 1 | M = (0111) M’ + 1 = (1001) & Operation |
AC | Q | Qn + 1 | SC |
---|---|---|---|---|---|---|
1 | 0 | Initial | 0000 | 0011 | 0 | 4 |
Subtract (M’ + 1) | 1001 | |||||
1001 | ||||||
Perform Arithmetic Right Shift operations (ashr) | 1100 | 1001 | 1 | 3 | ||
1 | 1 | Perform Arithmetic Right Shift operations (ashr) | 1110 | 0100 | 1 | 2 |
0 | 1 | Addition (A + M) | 0111 | |||
0101 | 0100 | |||||
Perform Arithmetic right shift operation | 0010 | 1010 | 0 | 1 | ||
0 | 0 | Perform Arithmetic right shift operation | 0001 | 0101 | 0 | 0 |
布斯乘法算法的数值示例是7 x 3 = 21,二进制表示形式21是10101。在这里,我们得到二进制00010101的结果。现在将其转换为十进制,如(000010101) 10 = 2 * 4 + 2 * 3 + 2 * 2 + 2 * 1 + 2 * 0 => 21。
示例:使用Booth的乘法算法将两个数字23和-9相乘。
在这里,M = 23 =(010111),Q = -9 =(110111)
Qn Qn + 1 | M = 0 1 0 1 1 1 M’ + 1 = 1 0 1 0 0 1 |
AC | Q | Qn + 1 SC |
---|---|---|---|---|
Initially | 000000 | 110111 | 0 6 | |
1 0 | Subtract M | 101001 | ||
101001 | ||||
Perform Arithmetic right shift operation | 110100 | 111011 | 1 5 | |
1 1 | Perform Arithmetic right shift operation | 111010 | 011101 | 1 4 |
1 1 | Perform Arithmetic right shift operation | 111101 | 001110 | 1 3 |
0 1 | Addition (A + M) | 010111 | ||
010100 | ||||
Perform Arithmetic right shift operation | 001010 | 000111 | 0 2 | |
1 0 | Subtract M | 101001 | ||
110011 | ||||
Perform Arithmetic right shift operation | 111001 | 100011 | 1 1 | |
1 1 | Perform Arithmetic right shift operation | 111100 | 110001 | 1 0 |
Q n +1 = 1,表示输出为负。
因此,23 * -9 = 2的补码111100110001 => (00001100111)