booth算法实验报告

booth算法实验报告

ID:1483654

大小:165.98 KB

页数:8页

时间:2017-11-11

booth算法实验报告_第1页
booth算法实验报告_第2页
booth算法实验报告_第3页
booth算法实验报告_第4页
booth算法实验报告_第5页
资源描述:

《booth算法实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Booth算法的实现一、目的和要求采用BOOTH算法,编程实现二进制数的乘法运算,进而了解计算机中定点运算的过程二、BOOTH算法的算法思想Booth算法是比较好的带符号数乘法的方法。它采用相加和相减的操作计算补码数据的乘积。Booth算法对乘数从低位开始判断,根据两个数据位的情况决定进行加法、减法还是仅仅移位操作。判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。BOOTH算法的算法思想是让乘数近似于某个较大的整值,然后用这个数值与被乘数的乘积减去其对应这个整值数的补数与被乘数的乘积来进行计算,从而提

2、高了乘法的运算效率。三、BOOTH算法原理Booth算法为补码一位乘,其具体实现过程为:给末位添加一个附加位x,与乘数的最后一位组成判断条件来决定部分积作何操作。其中,乘数最后一位与x一共有四种组合情况分别为:00,01,10,11。四种情况的具体操作分别为:00,部分积右移一位,01部分积加被乘数的补码再右移一位形成新的部分积,10部分积加[-x]的补码后右移一位形成新的部分积,11部分积右移一位。四、程序实现过程此算法由主函数和一个求补函数,一个booth算法构成。1.主函数在主函数中,首先需要输入x的绝对值,x的符号以及y的绝对值,y

3、的符号,其次,需要根据输入的值去调用求补函数求出x,y和(-x)的补码,最后再根据对booth函数的调用求得由booth算法实现的乘法的结果2.求补函数在求补函数中,在执行过程中需要先判断其符号位,根据其符号位求补,如果这个需要求补的数为正数则其补码就是这个正数,如果这个数是负数,则需要对其除符号位按位取反,再在末位加一。末位加一时需注意,若最后一位为零,则置末位为1,进位标志为零,反之,若最后一位为一,置末位为0,进位标志为1,向前进位。3.Booth算法在Booth算法的实现中,包括加法和移位两种操作。实现算法时,乘法运算前A寄存器被清

4、零,作为初始部分积。Q寄存器末位清零,作为附加位的初态。被乘数的补码存在X中(双符号位),乘数的补码在Q高n+1位中,计数器C存放乘数的位数n。乘法开始后,根据Q寄存器末两位Qn,Qn+1的状态决定部分积与被乘数相加还是相减,或是不加也不减,然后按补码规则进行算数移位,这样重复n次。最后,根据Q的末两位状态决定部分积与被乘数相加还是相减,或是不加也不减,但不必移位,这样便可得到最后结果。五、程序框图求补函数主函数开始输入X真值输入X的符号求X的补码输入Y的真值输入Y的符号求Y的补码输出Y的补码输出-X的补码输出Y的补码Booth算法输出结果

5、结束开始IntbBuffer[0]=signSign=0X补=X绝对值按位取反末位加一求得补码输出补码结束Booth算法执行框图开始0→A,0→Qn+1被乘数(补码)→X乘数(补码)→Qn→CQnQn+1(A)-(D)→A(A)+(D)→AA,Q同时算数右移一位(C)-1→CC=0?QnQn+1(A)+(X)→A(A)-(X)→A结束01100011NY10010011六、程序源代码#include#definen4intxsign,ysign,x_sign;intZ[2*n+2]={0};//部分积连接乘数移动后的数组即

6、输出结果intX[n+1];intY[n+1];intXfb[n+1];int*Xbuffer,*Ybuffer,*X_buffer;intstr1[n],str2[n],str3[n];voidBOOTH(intstrX[],intstrY[],intstr_xb[]){//strY是乘数数组指针strX是被乘数补码指针str_xb是负的被乘数的补码指针intx=0,i,j,r;intb=0;//进位标志位inta[20]={0};//存入部分积,部分积的初值为零intfeg;for(i=0;i

7、[i];for(j=n;j>=1;j--){if((strY[j]==0&&x==0)

8、

9、(strY[j]==1&&x==1)){//算术右移feg=Z[0];for(i=0;i<2*n+2;i++){Z[2*n+1-i]=Z[2*n-i];//最后一位开始后移}Z[0]=feg;//最后一位设成标志位}elseif(strY[j]==0&&x==1){b=0;for(i=n;i>=0;i--){if(Z[i]+strX[i]+b>=2)//加x的补码{Z[i]=Z[i]+strX[i]+b-2;b=1;}elseif(Z[i]+strX[

10、i]+b<2){Z[i]=Z[i]+strX[i]+b;b=0;}}//算术右移feg=Z[0];for(i=0;i<2*n+2;i++){Z[2*n+1-i]=Z[2*n-i]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。