文档介绍:
定点原码的一位乘法
设:X=XsXnXn-1…X3X2X1
Y=YsYnYn-1…Y3Y2Y1
则,X×Y=(XsYs)|(XnXn-1….X3X2X1)×(YnYn-1…Y3Y2Y1)
手工乘法过程:X=+1011;Y=+1101
X × Y: 1011 被乘数(十进制数11)
1101 乘数(十进制数13)
1011
0000
1011
1011
10001111 积(十进制数143)
部分积
定点原码1位乘法器实现
设置3个寄存器:部分积寄存器A,被乘数寄存器B,乘数寄存器C(部分积寄存器)和1个计数器。
运算步骤:
初始化: Y → C
X → B
0 → A
运算: C/2 → C(取乘数的末位)
B → ALU(根据C中的移出位送B或送全0)
A → ALU并执行加法(部分积送ALU与被乘数相加)
ALU/2 → BUS(从右边移出的一位放到C的最左边)
BUS → A
计数器减1
计数器不为0,则继续;
否则结束运算,结果在A、C中。
原码一位乘法逻辑图
实现原码一位乘法的逻辑电路
C/2→C
移位电路
ALU 加法器
A 部分积
C 乘数
B 被乘数
计数器 Cd
Cn
ALU/2→A
A→ALU
B→ALU
定点原码的一位乘法实现过程
:X=,Y=,求 X . Y。
部分积乘数被乘数:
00 0000 1 0 1 1
+X 00 1101
00 1101
右移1位 00 0110 1 1 0 1 1(丢失)
+X 00 1101
01 0011
右移1位 00 1001 1 1 1 0 1(丢失)
+0 00 0000
00 1001
右移1位 00 0100 1 1 1 1 0(丢失)
+X 00 1101
01 0001
右移1位 00 1000 1 1 1 1 1(丢失)
乘积高位乘积低位
X . Y =
定点补码1位乘法
(1)补码与真值的转换关系
设[X]补=•••Xn
当真值X≥0时,X0 =0,
[X]补=•••Xn = =X
当真值X <0时,X0 =1,
[X]补=•••Xn =2+X
X= [X]补-2= •••Xn - 2
= -1+ •••Xn = -1+
(2)补码的右移
不论数的正负,连同符号位将数右移一位,并保持符号位不变,相当于乘1/2(或除2)。证明见75页。
定点补码1位乘法
(3)补码一位乘法
设被乘数[X]补=•••Xn,
乘数[Y]补=•••Yn,则有:
[X•Y]补= [X]补•(-Y0+ )
证明见75-76页。
当乘数Y为正时,定点补码一位乘法的运算过程与定点原码一位乘法相同。。
当乘数Y为负时,运算结束后,还需要补充进行加[-X]补操作。见76-。
定点补码1位乘法
Booth(布斯) 1位乘法规则(带符号位的乘法):
将部分积初始化为0;
乘数的最低位为Yn ,在其后增加一位0作为[Y]补的第n+1位;
比较Yi与Yi-1; i=n+1, ……, 2, 1
若Yi-Yi-1=1,则部分积作加[X]补运算
若Yi-Yi-1=-1,则部分积作加[-X]补运算
若Yi-Yi-1=0,则部分积作加0运算(加0运算可以省略)
运算完成后,部分积右移1位,得到新的部分积;
反复n+1次,但最后一次不移位,所得的结果即为[X×Y]补。
布斯补码1位乘法实现过程(P78 )
被乘数: X= –, 乘数: Y= [X]补= [–X]补=
部分积乘数[Y]补=
00 0000 0 1 1 0 初始值:最后一位补0
–X 00 1101 10 为–X ,再右移
00 1101
右移1位 00 0110 1 0 1 1 0 丢失
+0 00 0000 11 仅右移
00 0110
右移1位 00 0011 0 1 0 1 1 丢失
+X 11 0011 01 为+X 再右移
11 0110
右移1位 11 1011 0 0 1 0. 1 0 1 丢失
–X 00 1101 10 为–X 再右移
00 1000
右移1位 00 0100 0 0 0 1 0 丢失
+X 11 0011 01 为+X
11 0111 0 0 0 1