1、第3章 运算器与运算方法3.3定点乘法运算3.3定点乘法运算二进制的乘法笔-纸运算过程,类似于十进制的乘法运算。例例3-6已知X=+0.1011B,Y=0.1101B,用笔-纸运算XY的结果先判断符号位同号还是异号,因为异号,所以乘积的符号位为-。乘积的数值为两数的绝对值逐位乘法运算的结果。所以(+0.1011)(-0.1101)=0.10001111。3.3.1原码一位乘法计算机中实现正数乘法,就是类似笔-纸乘法方法。但是为了提高效率等因素,做了以下改进:1)乘数的每1位乘以被乘数得到的结果X*yi后,将结果与前面所得结果累加,称为部分积Pi。没有等到所有位计算完了再一次求和,这就节省了保存
2、每次相乘结果X*yi的开销。2)每次求得X*yi后,不是将它左移和前次的部分积Pi相加,而是将部分积右移一位与X*yi相加。因为加法运算始终对部分积中的高n位进行。因此,只需一个n位的加法器就可实现两个n位数的相乘。3)对乘数中yi为1的位,执行部分积加X的运算,对为0的位不做加法运算。这样,可以节省部分积的生成时间。3.3.1原码一位乘法已知两正小数X和Y,Y=0.y1y2yn,则X*Y=X*(0.y1y2yn)=X*y1*2-1+X*y2*2-2+X*y3*2-3+X*yn*2-n 这个算式可以用递归计算过程实现:设Pi是乘法运算的部分积,则有初始P0=0P1=2-1(P0+X*yn)P2
3、=2-1(P1+X*yn-1)Pi+1=2-1(Pi+X*yn-i)(i=0,1n-1)Pn=2-1(Pn-1+X*y1)而 X*Y=Pn3.3.1原码一位乘法上述每一步的迭代过程可以归结为:1)对乘数代码,由低位到高位逐次取出1位判断2)若yn-i的值是“1”,则将上一步的部分积与X相加。若yn-i的值是“0”,则什么也不做。3)将结果右移一位,产生本次的迭代部分积。整个过程,从乘数的最低位开始yn和部分积P0开始,经过n次“判断-加法-右移”循环求出Pn为止。Pn为乘法的结果。3.3.1原码一位乘法3.3.1原码一位乘法1)寄存器X:用于存放被乘数2)乘商寄存器Y:运算开始时,用于存放乘数
4、Y。在乘法运算过程中,乘数已经判断过的位不再有存在的必要,将Y寄存器右移,可以将空出的高位部分用于保存部分积的低位部分。3)累加寄存器P:用于存放部分积的高位部分。初始值为0。运算过程中部分积的低位部分不参加累加计算,通过右移至Y寄存器高位保存。等到运算结束时,P中为部分积的高位部分。4)加法器F:是乘法运算的核心部件。在Y的最低位为“1”时,将累加寄存器P中保存的上一次迭代部分积和寄存器X的内容相加,将结果送至P。5)触发器C:保存加法器运算过程中产生的进位。6)计数器Cn:存放循环迭代的次数。初值为n(乘数的数值位数),每循环迭代一次,Cn减1,当Cn减到0时,乘法运算结束。(3)原码一位
5、乘法举例 例3-7已知X=+0.1101B,Y=+0.1011B,用原码一位乘法逻辑电路运算X*Y原。X原=01101,Y原=01011 符号位单独计算:0 0=0 数值部分按照原码1位乘法规则计算 1)从低到高取乘数中1位判断 2)为0不做,为1加被乘数 3)上一步结果右移一位 循环第一步,直至乘数每位判断完毕。(3)原码一位乘法举例3.3.2 原码两位乘法 3.3.2 原码两位乘法 上述操作中,需要将上一步部分积做+X,+2X,+3X运算后右移两位。X可以在X寄存器中获得,2X可以将X寄存器左移一位后得到。+3X若用+X和+2X两次加法运算实现,则运算速度较低。在本次运算中只执行-X,+4
6、X则归并到下一拍执行。-X可以用+-X补实现。因为下一拍部分积已右移了两位,上拍欠下的+4X就变成了+X。因此,设置一个触发器T,用于记录本拍是否有欠下+X。3.3.2 原码两位乘法3.3.2 原码两位乘法 例3-8已知X=+0.1101B,Y=+0.1011B,用原码两位乘法方法计算求X*Y原。X原=0.1101,Y原=0.1011 符号位单独计算:0 0=03.3.3补码一位乘法 原码乘法容易理解,但是符号位与数值位需要分别处理。计算机中的数据多用补码表示,希望能够用补码直接进行乘法运算。(1)补码一位乘法的实现原理 布斯(A.D.Booth)提出了一种算法,将相乘两数用补码表示,它们的符
7、号位和数值位一起参与运算过程,直接得出用补码表示的乘法结果,且正数和负数同等对待。这种算法是补码一位乘法,又称为布斯乘法。3.3.3补码一位乘法3.3.3补码一位乘法3.3.3补码一位乘法 最后归纳补码乘法的运算规则如下:1)乘数最低位增加一个辅助位0,用于求P1时,和yn组合 2)判断yn-iyn-i+1的值,相应地对上一步部分积执行+X、或-X,或不做运算。然后右移一位,得到新的部分积。3)重复第2)步,直到乘数符号位参加判断,执行+X、或-X,或不做运算。不移位。得到乘积。3.3.3补码一位乘法 例3-9已知X=+0.1101B,Y=0.1010B,采用布斯乘法计算X*Y补。X补=0.1101,Y补=1.0110,-X补=1.00113.3.3补码一位乘法X*Y补=1011111103.3.3补码两位乘法3.3.3补码两位乘法3.3.3补码两位乘法3.3.4阵列乘法器 在计算机内为了提高乘法运算速度,采用多级加法器,排列成阵列结构的形式,可以构成一个实现笔-纸执行过程的乘法器,称为阵列乘法器(Array Multiplier)。