计算机中实现乘法运算有两种方式, 使用原码实现和使用补码实现.

使用原码并行乘法

使用原码事项乘法的方式, 类似于笔算乘法, 符号位使用异或电路实现.

运算过程: 加法 + 移位

有成熟的末位决定被乘数是否与原部分积相加, 部分积右移移位形成新的部分积. 部分积 就是被乘数乘以乘数积的其中一行.

定义公式:
[x]原=x0.x1 x2…xn[x]原=x0.x1 x2…xn∴[x⋅y]原=(x0⊕y0)+(x1x2…xn)⋅(y1y2…yn) [x]_原 = x_0.x_1\ x_2\dots x_n \\ [x]_原 = x_0.x_1\ x_2\dots x_n \\ \therefore [x\cdot y]_原 = (x_0 \oplus y_0)+(x_1 x_2\dots x_n)\cdot (y_1 y_2\dots y_n)

例1: $A = -0.1101 \quad B=0.1011 $

直接算: ⇒A×B=−0.10001111\Rightarrow A \times B=-0.10001111

根据公式计算:

[A]原=1.1101[B]原=0.1011[A]_原 = 1.1101 \quad [B]_原=0.1011

[x⋅y]原=(1⊕0)+(0.10001111)=[1.10001111]原=−0.10001111[x \cdot y]_原 = (1 \oplus 0)+ (0.10001111)= [1.10001111]_原 = -0.10001111


移位操作

  • 逻辑左移(LSL)和逻辑右移(LSR): bit位向左右移, 空出来的使用0补全
  • 算术左移(ASL)和算术右移(ASR): 算术左移同逻辑左移; 算术右移, bit位向右移, 空出来的使用符号位补全

第一类移动是将bit位简单移动, 不考虑计算因素, 第二类是在计算中的移位, 在补码运算中意义重大.

正、负数补码(算术)右移的意义

  • 正数右移相当于对被操作数进行整除
  • 负数右移也是对被操作数进行整除, 需要注意: 如果有余数, 结果-1; 负数整除最大值为-1;

定点小数真值和补码的另一关系

[X]补=X0.X1X2…Xn[X]_补 = X_0.X_1X_2\dots X_n

[X]原=−X0+0.X1X2…Xn[X]_原 = -X_0 + 0.X_1X_2\dots X_n

例:

[1.11]补=−1+0.11=−1+0.11=[−0.01]真[1.11]_补 = -1 + 0.11 = -1 + 0.11 = [-0.01]_真

[1.1]补=−1+0.1=[−0.1]真[1.1]_补 = -1 + 0.1 = [-0.1]_真


补码乘法规则

设被乘数 [x]补=x0.x1x2…xn[x]_补 = x_0.x_1 x_2 \dots x_n , 乘数 [y]补=y0.y1y2…yn[y]_补= y_0.y_1 y_2 \dots y_n

  • 若被乘数任意, 乘数为正
    • 同原码乘法规则, 但加法和移位操作按补码规则运算
    • 乘积的符号自然形成
    • 公式为: [x⋅y]补=[x]补(0.y1y2…yn)[x \cdot y]_补 = [x]_补 (0.y_1 y_2 \dots y_n) --无需校正
  • 拖被乘数任意, 乘数为负
    • 乘数 [y]补[y]_补 , 去掉符号位, 操作同上
    • 运算完成后, 需对结果加 [−x]补[-x]_补 校正
    • 公式为: [x⋅y]补=[x]补(0.y1y2…yn)+[−x]补[x \cdot y]_补 = [x]_补 (0.y_1 y_2 \dots y_n) + [-x]_补

**统一补码乘法公式: ** [x⋅y]补=[x]补(0.y1y2…yn)+[−x]补⋅y0[x\cdot y]_补 = [x]_补 (0.y_1 y_2 \dots y_n) + [-x]_补\cdot y_0


Booth算法

运算规则

  • 符号位参与运算, 运算数均以补码表示
  • 被乘数一般去双符号位参与运算
  • 乘数可取单符号位
  • 乘数末位增设附加为Yn+1Y_{n+1} , 切初值为0
  • 操作按下表
  • 最后一步无需移位
YnY_n Yn+1Y_{n+1} 操作
0 0 部分积右移移位
0 1 部分积加 [x]补[x]_补 , 右移一位
1 0 部分积加 [−x]补[-x]_补 , 右移一位
1 1 部分积右移一位

运算过程
【计算机组成原理】乘法运算总结

Booth运算电路逻辑图
【计算机组成原理】乘法运算总结

总结

计算集中乘法是通过加法实现的, 这里的加法不是简答的累加(例 4*5, 不是把4累加5次), 而是通过移位相加的方式, 通过计算机Booth算法进行乘法运算时最多相加次数为除数位数减1次.

相关文章:

  • 2021-09-29
  • 2021-11-14
  • 2021-08-28
  • 2021-12-30
  • 2021-12-03
  • 2021-11-05
  • 2021-07-23
  • 2021-05-26
猜你喜欢
  • 2021-10-01
  • 2021-06-24
  • 2023-03-25
  • 2022-01-01
  • 2021-12-22
  • 2021-12-01
  • 2021-07-11
相关资源
相似解决方案