精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

定点乘法(Booth算法)

大纲定位

二(二)3 乘/除运算

大纲原文是「乘/除法运算的基本原理,乘法电路和除法电路的基本结构」——注意是两件事:原理层要懂"乘法怎么用加法和移位做出来",结构层要能看懂乘法器的部件构成。

手推 Booth 表属于理解原理的手段,练一两遍即可,不必追求速度。

大纲这一条还要求「电路的基本结构」,那部分见 乘法电路与除法电路的基本结构——真题里除法/乘法的综合题考的正是那里。

考情分析

408 的题型只有单项选择题综合应用题两类。真题层面对乘法的考查落在实现层次与电路结构上:ALU + 移位器的多周期方案与阵列乘法器的单周期方案有何差别、快在哪、控制逻辑做什么。逐位手工模拟 Booth 的题型目前只在练习题中出现。

原码一位乘法(基础)

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

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

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

原码一位乘完整例

|X|=0.1101|Y|=0.1011 的乘积数值部分(部分积 P 用双符号位,Q 初始放乘数,每步看 Q 最低位决定是否加 |X|,然后 (P,Q) 整体右移一位):

步骤判断与操作P(双符号)Q
初始00.00001011
第 1 步末位 1:P+|X|00.11011011
右移00.01101101
第 2 步末位 1:P+|X|01.00111101
右移00.10011110
第 3 步末位 0:不加00.10011110
右移00.01001111
第 4 步末位 1:P+|X|01.00011111
右移00.10001111

积的数值部分 = PQ = 0.10001111。验证:1316×1116=143256=0.100011112

两个细节是采分点:中间出现 01.xxxx(绝对值暂时超过 1)是正常的——双符号位就是为这个准备的,右移一位后回到正常范围;右移时 P 的最低位移入 Q 的最高位,Q 中被用掉的乘数位逐个移出,最终 Q 里装的全是积的低位。

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。宽度取 n+2 位(n 为字长,本篇例题 n=4A 为 6 位)——比字长多出的两位用于容纳部分积累加过程中的符号扩展,不会溢出
  • 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]2nA 高出的两位是符号扩展,丢弃)

算术右移

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

交互可视化

加载可视化中...

典型例题

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

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

A 取 6 位(n+2=4+2),[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 位(A 高出字长的那两位是符号扩展,不算进结果)
  • [ ] 双符号位防止运算过程中的溢出

真题练习