数组实现Booth算法解析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机组成原理综合训练项目报告书 项目名称 Booth算法的实现 电子与信息工程学院 计算机科学系 Booth 算法思想 比较法是由Booth夫妇首先提出来的,故又称Booth算法。它采用相加和相减的操作计算补码数据的乘积。Booth算法对乘数从低位开始判断,根据两个数据位的情况决定进行加法减法还是仅仅移位操作。判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。 程序实现过程说明 本次实验我是通过GCC编译器使用C语言来写的,为了了解Booth算法的核心思想,我使用的是数组来实现Booth算法的。通过对数组内元素的移动来实现移位操作。加一个附加位。通过判断附加位和乘数末尾的数差值来判断移位加、减(其实是通过加被乘数的负数来实现)、还是只移位。 我是使用函数模块实现局部功能,主要函数如下: int D_BB(int arry[]);//求补函数 int D2B(int arry[],int num); //十进制转换为二进制 int rmove(int arry_s[],int arry_b[],int a,int b); //右移函数 int arry_len(const int arry[]); //有效位长度 void regulate(int arry[]);//校正数组 void arry_add(int arry_a[],const int arry_b[],int k);//数组求和 int Booth(int Num_a[],int _Num_a[],int Num_b[]);booth算法 程序流程图 图1. 程序流程图 调试结果截图 图2. BOOTH算法运行图 设计中遇到的问题 刚开始的时候,我想利用数组来实现BOOTH算法,想要把函数中的数组返回到主调函数中去,就把被调函数设置为指针型的函数。 设计中的不足及其改进措施 在显示乘数和被乘数的补码时,没有控制输出的格式,而采用以16位的数组全部输出该输。可以使用for循环加上乘数(被乘数)的原码有效位来控制输出的格式。 源程序代码 /* * Booth算法 - by sun * */ #include stdio.h #include stdlib.h #define N 16 /* - - - 函数声明部分 - - - */ int D_BB(int arry[]);//求补函数 int D2B(int arry[],int num); //十进制转换为二进制 int rmove(int arry_s[],int arry_b[],int a,int b); //右移函数 int arry_len(const int arry[]); //有效位长度 void regulate(int arry[]);//校正数组 void arry_add(int arry_a[],const int arry_b[],int k);//数组求和 int Booth(int Num_a[],int _Num_a[],int Num_b[]);booth算法 /* - - - 函数定义部分 - - - */ int D_BB(int arry[])//求补函数 { int i,sign = 1; for(i = N-1;i = 0;i-- ) { if(0 == arry[i]) arry[i] = 1; else arry[i] = 0; } arry[N-1] = arry[N-1] + 1; for(i = N-1; i =0 (1 == sign);i--) { if((2 == arry[i]) (1 == sign) ) { arry[i] = 0; arry[i-1] = arry[i-1] + 1; } else if((3 == arry[i]) (1 == sign) ) { arry[i] = 1; arry[i-1] = arry[i-1] + 1; } else sign = 0; } return 0; } int D2B(int arry

文档评论(0)

四娘 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档