ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:105.46KB ,
资源ID:17957166      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17957166.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机组成原理算法实现.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

计算机组成原理算法实现.docx

1、计算机组成原理算法实现计算机组成原理课程设计说明书(课题二)信息工程学院1课程设计的目的 12设计内容与要求 12.1题目 12.2功能 12.3算法原理 13主要技术指标及特点 43.1登录窗体 43.2操作界面 73.3定点小数机器表示窗口界面 93.4定点小数变形补码加减运算界面 133.5定点小数的原码乘法界面 163.6浮点数加减运算界面 193.7帮助界面 264设计小结 27参考文献 28计算机组成原理算法实现(二)1课程设计的目的本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些

2、算法,并进行具体实现,提高分析问题、解决问题的综合应用能力2设计内容与要求2.1题目计算机组成原理算法实现(二)2.2功能能够实现定点小数的机器数表示、定点小数的变形补码加减运算、定点小数的原码一位乘法运算和浮点数的加减运算。2.3算法原理数据表示方法:计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。(1)定点表示:约定机器中所有数据的小数点位置是固定的。由于约定在固定的位置,所以小数点就不再使用记号“.”来表示。(2)浮点表示:定点数表示的数的范围有限,为了扩展数的表示范围,按照科学记数法表示数据的方式,任何一个二进制数N都可以表示成如下的格式:NM*2eM:尾数,是一个纯小数

3、,决定数据的表示精度e:指数,又称为阶码,是一个整数,决定数据的表示范围数的机器码表示:一般书写所表示的数据称为真值,在计算机中为了表示符号位,通常把符号位和数字位一起编码来表示相应的数,形成了各种数据的存储和表示方法,这些编码称为机器码。常用的机器码有原码、反码、补码和移码。(1)原码:原码的数值部分是该数的绝对值,最高位表示符号位,最高位为0是正数,最高位为1是负数。(2)反码:正数的反码等于原码,负数的反码等于除符号位外其余二进制数码0变成1,1变成0。正数:x反=x原=x负数:符号位不变,其余变反(3)补码:正数的补码等于原码,负数的补码等于反码加1。正数:x补=x原负数:x补=x反+

4、1定点加、减法运算:结论:任何两数的补码之和等于两数之和的补码v 补码加法基本公式:x补+y补=x+y补v 补码减法基本公式:x补-y补x补+-y补当负数用补码表示后,符号位作为数据的一部分一起参加运算,运算器不用考虑参加加法运算的操作数的正负以及结果的正负,任意数的加法就可以化作正数加法来实现。v 溢出:在定点数机器中,数的大小超出了定点数能表示的范围,叫溢出。(1)在定点小数机中数的表示范围是-1x1,如果运算过程中出现了大于1或者小于1的情况。(2)在定点整数机(8位)中数的表示范围是-128x127,如果运算过程中出现了大于127或者小于128的情况。双符号位法:将符号位扩展为2位,具

5、体说就是对于正数两个符号位是“00”,对于负数两个符号位是“11”。两个符号位都看作数码一样参加运算。两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。 符号位“01”,上溢出 符号位“10”,下溢出 符号位“00”或者“11”,未溢出从补求补的法则是:对补“包括符号位求反且最末位加1”,即可得到补定点乘法运算:在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示(定点整数也同样适用)被乘数原f.n110乘数原f.n110则乘积原(ff)(0.n110)(0.

6、n110)式中,f为被乘数符号,f为乘数符号。机器算法:机器中一种方法是多次采用“加法移位”的方法来完成,称为串行乘法器,它的硬件结构简单,但是速度慢,目前广泛使用的是流水式阵列乘法器,称为并行乘法器。无符号数m乘以n会产生m*n个位积,出现m+n个列和,并行乘法器的关键是快速产生m*n个位积,对位积进行相加运算产生m+n个列和。第一步:位积的产生观察乘法运算:0*00,0*10,1*00,1*11相当于:ab所以m*n个位积可以由m*n个与门并行产生。第二步:列和的产生:利用全加器浮点数的加减法运算:浮点数的加减法运算分为六个步骤:(1)0操作数检查浮点加减运算过程比定点运算过程复杂。如果判

7、知两个操作数或中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。0操作数检查步骤则用来完成这一功能。参加加法运算的数据都是非零,进入下一步。(2)比较价码大小并完成对阶为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位。两浮点数进行加减,首先要看两数的阶码是否相同,若二数阶码不同,表示小数点位置没有对齐,此时必须使两个数阶码相同,这个过程叫作对阶。对阶操作规定使尾数右移,尾数右移后阶码作相应增加,因此对阶时,总是使小阶向大阶看齐。(3)尾数进行加减运算对阶结束后,即可进行尾数的求和运算。不论加法运算还是减法运算,都按加法进行操作(减法利用补

8、码减法转换成补码的加法来做),其方法与定点加减法运算完全一样。(4)结果规格化a.采用双符号位表示尾数时,如果两符号位为01或10时,应将结果尾数右移一位,阶码加1(叫“右规”)。b.如果尾数最高数值位与符号位相同,应将尾数左移,阶码减,直至数值位最高位与符号位相反(叫“左规”)。(5)舍入运算在对阶向右规格化,尾数向右移位,这样被右移的尾数的低位部分会被丢掉,从而造成一定误差,要进行舍入处理。简单的舍入方法有两种:一种是“0舍1入”法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位做加加1运算。另一种是“恒置1”法,即只要数位被移掉,就在尾数的末尾恒置1。(6)判断结果是否溢出

9、根据补码的双符号检测溢出的方法确定阶码是否溢出。3主要技术指标及特点针对题目的各个功能要求,本人将程序分为一个主模块ZuCheng和六个子模块分别为Password、Show、Form3、Form4、Form5、Help。显然这是一个典型的使用模块化结构的程序。所有独立功能的部分都采用子模块结构,因为模块化设计使人一目了然。下面将介绍主模块和各子模块的运用特点和参数说明,并给出他们的流程图和主要Java代码。3.1登录窗体口令输入错误时给出重新输入口令的提示三次口令输入错误被禁止使用Password模块流程图Password模块的主要Java代码publicvoidactionPerforme

10、d(ActionEvente)Strings=newString(123if(e.getSource()=button1)while(i=0&m3)JOptionPane.showMessageDialog(this,您已被禁用,错误对话框,JOptionPane.ERROR_MESSAGE);if(e.getSource()=button2)setVisible(false);if(i=1)ZuChengs1=newZuCheng(操作菜单);s1.setVisible(true);setVisible(false);3.2操作界面通过ZuCheng主模块,调用Show、Form3、Form

11、4、Form5、Help子模块。当选择对应子模块的按钮就可以调用各个子模块,而各子模块之间是相互独立的,下面用模块图来表示程序模块间的调用关系:(箭头起始处模块调用箭头指向处模块)Zucheng模块流程图Zucheng模块的主要Java代码publicvoidactionPerformed(ActionEvente) if(e.getSource()=m1) Shows1=newShow(机器数表示); s1.setVisible(true); elseif(e.getSource()=m2) Form3f1=newForm3(); f1.setTitle(定点变形补码加减); f1.setV

12、isible(true); elseif(e.getSource()=m3) Form4f2=newForm4();f2.setTitle(定点原码乘法);f2.setVisible(true); elseif(e.getSource()=m4) Form5f5=newForm5(浮点加减); f5.setVisible(true); elseif(e.getSource()=m5) Helph1=newHelp(帮助信息); h1.setVisible(true); h1.work(); 3.3定点小数机器表示窗口界面在上面的窗体中按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。输入

13、一个带符号的二进制定点小数(如+0.11010或-0.010101)后,按“原码”、“反码”、“补码”或“移码”按扭中的任一个后,将在第二个文本框中显示对应的机器数,同时要求将第二个标签中“原码”字样改成对应的编码字样。选择“返回”按扭时回到主窗体。比如,用户输入-0.010101,执行相应的操作会出现相应的结果,如下列各图表示原码表示:反码表示:补码表示:移码表示:Show模块流程图Show模块的主要Java代码publicvoidactionPerformed(ActionEvente)if(e.getSource()=button1)me=1;t1.requestFocusInWindo

14、w();elseif(me=1)if(e.getSource()=button2)b3.setText(该数对应的原码为:);Stringsg=t1.getText();if(sg.startsWith(+)intindex=sg.indexOf(+);Stringss=sg.substring(index+1);t2.setText(ss);elseintindex=sg.indexOf(-);Stringss=sg.substring(index+1);Stringsf=ss.replaceFirst(0,1);t2.setText(sf);elseif(e.getSource()=but

15、ton3)b3.setText(该数对应的反码为:);Stringsg=t1.getText();if(sg.startsWith(+)intindex=sg.indexOf(+);Stringss=sg.substring(index+1);t2.setText(ss);elseintindex=sg.indexOf(-);Stringss=sg.substring(index+1);chara=ss.toCharArray();for(inti=2;ia.length;i+)charm=1,n=0;if(ai=m)ai=n;elseai=m;Stringse=newString(a);St

16、ringsf=se.replaceFirst(0,1);t2.setText(sf);elseif(e.getSource()=button4)b3.setText(该数对应的补码为:);Stringsg=t1.getText();if(sg.startsWith(+)intindex=sg.indexOf(+);Stringss=sg.substring(index+1);t2.setText(ss);elseintindex=sg.indexOf(-);Stringss=sg.substring(index+1);chara=ss.toCharArray();for(inti=2;i=2;

17、j-)if(aj-1=0)aj-1=1;aj=0;break;elseaj=0;Stringse=newString(a);Stringsf=se.replaceFirst(0,1);t2.setText(sf);elseif(e.getSource()=button5)b3.setText(该数对应的移码为:);Stringsg=t1.getText();if(sg.startsWith(+)intindex=sg.indexOf(+);Stringss=sg.substring(index+1);Stringse=ss.replaceFirst(0,1);t2.setText(se);el

18、seintindex=sg.indexOf(-);Stringss=sg.substring(index+1);chara=ss.toCharArray();for(inti=2;i=2;j-)if(aj-1=0)aj-1=1;aj=0;break;elseaj=0;Stringsf=newString(a);t2.setText(sf);if(e.getSource()=button6)setVisible(false);3.4定点小数变形补码加减运算界面在此窗口用户需要输入两个定点小数来参加运算,同上面一样,用户必需点击输入按钮,才能激活输入框。输入完毕,用户点击各个按钮,则会出现相应的结

19、果,比如,用户输入-0.11010和+0.01101,执行相应的操作会出现相应的结果,如下图表示Form3模块流程图Form3模块的主要Java代码/获得第一个数的补码publicStringwork1()Stringsg=d1.getText();sdf);if(sg.startsWith(+)intindex=sg.indexOf(+);Stringss=sg.substring(index+1);ss1=ss.replaceFirst(0,00);elseintindex=sg.indexOf(-);Stringss=sg.substring(index+1);chara=ss.toCh

20、arArray();for(inti=2;i=2;j-)if(aj-1=0)aj-1=1;aj=0;break;elseaj=0;Stringse=newString(a);ss1=se.replaceFirst(0,11);returnss1;/做加法时获得第二个数的补码publicStringwork2()Stringsa=d2.getText();if(sa.startsWith(+)intindex=sa.indexOf(+);Stringss=sa.substring(index+1);ss2=ss.replaceFirst(0,00);elseintindex=sa.indexOf

21、(-);Stringss=sa.substring(index+1);charb=ss.toCharArray();for(inti=2;i=2;j-)if(bj-1=0)bj-1=1;bj=0;break;elsebj=0;Stringsc=newString(b);ss2=sc.replaceFirst(0,11);returnss2;/做减法时获得第二个数的补码publicStringwork3()Stringsa=d2.getText();if(sa.startsWith(-)intindex=sa.indexOf(-);Stringss=sa.substring(index+1);s

22、s2=ss.replaceFirst(0,00);elseintindex=sa.indexOf(+);Stringss=sa.substring(index+1);charb=ss.toCharArray();for(inti=2;i=2;j-)if(bj-1=0)bj-1=1;bj=0;break;elsebj=0;Stringsc=newString(b);ss2=sc.replaceFirst(0,11);returnss2;/实现两数补码相加publicStringadd1(chara1,chara2)charjg=newcharr;charcf=0;while(r0)if(a1r-

23、1=0&a2r-1=0&cf=0)jgr-1=0;cf=0;elseif(a1r-1=0&a2r-1=0&cf=1)|(a1r-1=0&a2r-1=1&cf=0)|(a1r-1=1&a2r-1=0&cf=0)jgr-1=1;cf=0;elseif(a1r-1=0&a2r-1=1&cf=1)|(a1r-1=1&a2r-1=0&cf=1)|(a1r-1=1&a2r-1=1&cf=0)jgr-1=0;cf=1;elseif(a1r-1=1&a2r-1=1&cf=1)jgr-1=1;cf=1;elsejgr-1=a1r-1;r-;Stringresult=newString(jg);returnres

24、ult;3.5定点小数的原码乘法界面同样,在此界面用户必需要输入乘数和被乘数后执行乘法操作,输入前,用户必需要点击输入按钮才能接获输入框,如输入乘数为+0.1000,被乘数为+0.1101,执行相应的操作得出相应的结果,如下图Form4模块流程图Form4模块的主要Java代码/被乘数转化为原码形式publicStringwork1()Stringa1=t1.getText();if(a1.startsWith(+)intindex=a1.indexOf(+);s1=a1.substring(index+1);elseintindex=a1.indexOf(-);Stringss=a1.substring(index+1);s1=ss.replaceFirst(0,1);returns1;/乘数转化为原码形式publicStringwork2()Stringa2=t2.getText();if(a2.startsWith(+)intindex=a2.indexOf(+);s2=a2.substring(index+1);elseintindex=a2.indexOf(-);Stringss=a2.substring(index+1);s2=ss.replac

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2