【计算机组成原理】乘法运算

原码乘法运算
r进制乘法可以将乘数变为,第k位数字乘rk 。
被乘数变为一个整数乘rx 。
Ex:
首先需要把0.1101分解为:1101 x 2-4
然后将乘数0.1011分解为:1 x 2-1 + 0 x 2-2 + 1 x 2-3 + 1 x 2-4
最后将其相乘后相加
0.1101 x 0.1011 = (1101 x 1 x 2-5) + (1101 x 0 x 2 -6) + (1101 x 1 x 2-7) + (1101 x 1 x 2-8) = 0.
乘2k 使用移位运算实现 。
1、符号位如何处理
答:对两个符号位使用异或 。
2、乘积位数扩大一倍如何处理
答:使用两个位数相同的寄存器存取数据
3、位积如何保存下来统一相加?X
答:不统一相加
原码一位乘法
每次加0或被乘数的绝对值补码
机器字长为n+1=5位(含一位符号位)
[x]原 = 1.1101
[y]原 = 0.1011
符号位单独运算:
1 异或 0 的结果为1 。
数值位取绝对值计算:
[|x|]原 = 0.1101
[|y|]原 = 0.1011
ACC():累加器,存放操作数,或运算结果
MQ(- ):乘商寄存器,在乘除运算中存储操作数或运算结果
X( and Logic Unit):通用的操作数寄存器,用于存放操作数
ALU:算术逻辑单元,实现算术和逻辑运算
+-x/
ACC
被加数、和
被减数、差
乘积高位
被除数、余数
MU
乘数、乘积低位

X
加数
减数
被乘数
除数
实现方法:先加法再移位,高位补0,舍弃MQ最后一位,n次(n为乘数数值位长度)
ACC置0,MQ为乘数,X为被乘数 。
若当前MQ最后一位为1,在ACC上加被乘数,然后向右移位 。
若当前MQ最后一位为0,在ACC上加0,然后向右移位 。
注意小数点位置 。
最后修改符号位,ACC第一位为符号位 。
若采用一位符号位:
ACC 为n+1位 :第一位最后为符号位
MQ为n+1位:存放乘数包括其符号位,最后符号位不参与运算
X为n+1位:存放被乘数,包括其符号位
若采用两位符号位(手写二进制乘法):
ACC 为n+2位 :前两位最后为符号位
MQ为n位:存放乘数的数值位
X为n+2位:存放被乘数及其符号位,前两位为符号位 。
两位符号位手算:
[x]原 = 1.1101
[y]原 = 0.1011
1、符号位异或得1为正数 。
2、对两个数值的绝对值进行计算,n为4,4次乘法 。
[|x|]原 = 0.1101
[|y|]原 = 0.1011
# 初始,ACC置0,MQ为乘数,X为被乘数ACC 00.0000 MQ 1011X00.1101 # 第一次加法ACC加被乘数ACC 00.1101 MQ 1011X00.1101 ACC MQ 右移ACC 00.0110 MQ 1101X00.1101 # 第二次加法ACC加被乘数ACC 01.0011 MQ 1101X00.1101 ACC MQ 右移ACC 00.1001 MQ 1110X00.1101# 第三次加法ACC加0ACC 00.1001 MQ 1110X00.1101 ACC MQ 右移ACC 00.0100 MQ 1111X00.1101# 第四次加法ACC加被乘数ACC 01.0001 MQ 1111X00.1101 ACC MQ 右移ACC 00.1000 MQ 1111X00.1101# 得到结果为ACC和MQ中的高位和低位前后相加,然后加上符号00.1000 1111 + 符号位11.1000 1111
补码的乘法运算 补码一位乘法 & Booth算法
设计器字长为5位,数值位4位,符号位1位 。x= -0.1101,y=+0.1011
补码一位乘法进行n轮加法和移位,最后再来一次加法 。
与原码乘法不同,MQ的后方添加了一个辅助位 。辅助位初始为0 。
由于计算机中寄存器的位数相同,ACC和X也是n+2位 。因此采用双符号位 。
每次加0、被乘数补码或被乘数相反数的补码
1、每次ACC如何加

【计算机组成原理】乘法运算

文章插图
#这里?的最低位不是MQ的第n+2位,而是n+1位 。
辅助位 - MQ最低位 = 1 时 ACC +[x]补
辅助位 - MQ最低位 = 0 时 ACC +0