Appearance
定点乘法(Booth算法)
考情分析
Booth 算法是补码乘法的标准方法,408 大题有出过手工模拟 Booth 算法的题目。选择题中也会考核 Booth 算法的步骤数、部分积的累加规则等。
原码一位乘法(基础)
在学 Booth 之前先回顾原码乘法:
- 符号位单独处理:结果符号 = 两操作数符号的异或
- 数值位:部分积累加右移
原码乘法不能直接处理负数,需要先取绝对值。
Booth 算法原理
Booth 算法直接对补码进行乘法运算,符号位参与运算,不需要单独处理符号。
核心思想
对乘数
| 操作 | ||
|---|---|---|
| 0 | 0 | 部分积不变(+0) |
| 0 | 1 | 部分积加 |
| 1 | 0 | 部分积加 |
| 1 | 1 | 部分积不变(+0) |
将 01 视为"1 的开始"(加 X),10 视为"1 的结束"(减 X),这是对 Booth 的直觉解释。
寄存器组结构
:累加寄存器,初始为 0(宽度 = 操作数位数 + 1 位符号位,使用双符号位) :乘数寄存器,存放乘数 :附加位,初始为 0,用于存放 最低位的前一位
算法步骤
设操作数均为
- 初始化:
, , - 检查
( 最低位)和 : : : 或 : 不变
- 对
执行算术右移 1 位( 的旧值被 的最低位覆盖, 的最高位用符号位填充) - 重复步骤 2-3,共
次 - 最终结果在
中( 位)
算术右移
算术右移时,符号位保持不变,各位右移,最低位移入下方寄存器。双符号位中,两个符号位一起保持不变。
交互可视化
典型例题
例题:用 Booth 算法计算
使用双符号位,
初始:
| 步骤 | 操作 | ||||
|---|---|---|---|---|---|
| 初始 | — | — | 000000 | 1010 | 0 |
| 第1步加法 | 0,0 | A不变 | 000000 | 1010 | 0 |
| 第1步右移 | — | 右移 | 000000 | 0101 | 0 |
| 第2步加法 | 1,0 | A+[-X] | 111001 | 0101 | 0 |
| 第2步右移 | — | 右移 | 111100 | 1010 | 1 |
| 第3步加法 | 0,1 | A+[X] | 000011 | 1010 | 1 |
| 第3步右移 | — | 右移 | 000001 | 1101 | 0 |
| 第4步加法 | 1,0 | A+[-X] | 111010 | 1101 | 0 |
| 第4步右移 | — | 右移 | 111101 | 0110 | 1 |
结果 11010110。
真值:11010110,正确。
与原码乘法的对比
| 特性 | 原码一位乘法 | Booth 算法 |
|---|---|---|
| 处理对象 | 原码(需取绝对值) | 补码(直接运算) |
| 符号处理 | 单独异或 | 自动包含在运算中 |
| 每步操作 | 加/不加,右移 | 加/减/不加,右移 |
| 适用场景 | 正数乘法 | 带符号数乘法 |
考点清单
- [ ] Booth 算法的位对检查规则(00/11不变,01加X,10减X)
- [ ] 寄存器组
的初始状态设置 - [ ] 算术右移的操作(符号位不变,整体右移)
- [ ] 共执行
步( 为含符号位的操作数位数) - [ ] 结果在
中,共 位 - [ ] 双符号位防止运算过程中的溢出