Skip to content

定点乘法(Booth算法)

考情分析

Booth 算法是补码乘法的标准方法,408 大题有出过手工模拟 Booth 算法的题目。选择题中也会考核 Booth 算法的步骤数、部分积的累加规则等。

原码一位乘法(基础)

在学 Booth 之前先回顾原码乘法:

  • 符号位单独处理:结果符号 = 两操作数符号的异或
  • 数值位:部分积累加右移

原码乘法不能直接处理负数,需要先取绝对值。

Booth 算法原理

Booth 算法直接对补码进行乘法运算,符号位参与运算,不需要单独处理符号。

核心思想

对乘数 Y 相邻两位进行检查(当前位 yi 和前一位 yi1):

yiyi1操作
00部分积不变(+0)
01部分积加 [X](即 +X
10部分积加 [X](即 X
11部分积不变(+0)

将 01 视为"1 的开始"(加 X),10 视为"1 的结束"(减 X),这是对 Booth 的直觉解释。

寄存器组结构

[AQQ1]
  • A:累加寄存器,初始为 0(宽度 = 操作数位数 + 1 位符号位,使用双符号位)
  • Q:乘数寄存器,存放乘数 [Y]
  • Q1:附加位,初始为 0,用于存放 Q 最低位的前一位

算法步骤

设操作数均为 n 位(含符号位),共执行 n 步:

  1. 初始化:A=0Q=[Y]Q1=0
  2. 检查 Q0Q 最低位)和 Q1
    • (Q0,Q1)=01A=A+[X]
    • (Q0,Q1)=10A=A+[X]
    • (Q0,Q1)=0011A 不变
  3. [AQQ1] 执行算术右移 1 位Q1 的旧值被 Q 的最低位覆盖,A 的最高位用符号位填充)
  4. 重复步骤 2-3,共 n
  5. 最终结果在 [AQ] 中(2n 位)

算术右移

算术右移时,符号位保持不变,各位右移,最低位移入下方寄存器。双符号位中,两个符号位一起保持不变。

交互可视化

加载可视化中...

典型例题

例题:用 Booth 算法计算 X=+7Y=6,设机器字长 4 位(含符号位)。

[X]=0111[X]=1001[Y]=1010

使用双符号位,[X]=000111[X]=111001

初始:A=000000Q=1010Q1=0

步骤Q0,Q1操作AQQ1
初始00000010100
第1步加法0,0A不变00000010100
第1步右移右移00000001010
第2步加法1,0A+[-X]11100101010
第2步右移右移11110010101
第3步加法0,1A+[X]00001110101
第3步右移右移00000111010
第4步加法1,0A+[-X]11101011010
第4步右移右移11110101101

结果 [AQ]=1111010110,取低 8 位 11010110

真值:+7×(6)=42=(101010)2,补码为 11010110,正确。

与原码乘法的对比

特性原码一位乘法Booth 算法
处理对象原码(需取绝对值)补码(直接运算)
符号处理单独异或自动包含在运算中
每步操作加/不加,右移加/减/不加,右移
适用场景正数乘法带符号数乘法

考点清单

  • [ ] Booth 算法的位对检查规则(00/11不变,01加X,10减X)
  • [ ] 寄存器组 [AQQ1] 的初始状态设置
  • [ ] 算术右移的操作(符号位不变,整体右移)
  • [ ] 共执行 n 步(n 为含符号位的操作数位数)
  • [ ] 结果在 [AQ] 中,共 2n
  • [ ] 双符号位防止运算过程中的溢出

真题练习

相关真题(3题)

2024Q15选择题2分

整数乘法的硬件与编译实现方式

2020Q43综合题13分

无符号与有符号乘法的硬件实现综合题

Booth乘法ALU数据表示(综合)
2010Q13选择题2分

8位补码乘法溢出判断