计算机组成原理试验报告.doc

上传人:scccc 文档编号:12571026 上传时间:2021-12-04 格式:DOC 页数:27 大小:867.50KB
返回 下载 相关 举报
计算机组成原理试验报告.doc_第1页
第1页 / 共27页
计算机组成原理试验报告.doc_第2页
第2页 / 共27页
计算机组成原理试验报告.doc_第3页
第3页 / 共27页
计算机组成原理试验报告.doc_第4页
第4页 / 共27页
计算机组成原理试验报告.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《计算机组成原理试验报告.doc》由会员分享,可在线阅读,更多相关《计算机组成原理试验报告.doc(27页珍藏版)》请在三一文库上搜索。

1、计算机组成原理课程设计说明书计算机组成原理算法实现(二)1课程设计目的本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基 础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成 原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。2课程设计内容与要求课题能够实现定点小数的机器数表示、定点小数的变形补码加减运算、定 点小数的原码一位乘法运算和浮点数的加减运算。3功能模块详细设计3.1程序执行流程图本程序含有以下几个功能模块,分别能够实现如设计内容所设计的功能。共有5 个类,系统流程图如图3-1所示:图3-1系统流程图3.2各个类的功能(1)

2、Xia ngmu.java该java文件为整个程序的主类。(2) Ddjs.java实现定点小数的机器数表示,对于正数的定点小数,它的原码、补码、反码为 它本身;移码为最高符号位变为1,其他位保持不变。对于负数的原码为最高符号位 2 / 21为一,数值位保持不变;补码为从低位向高位找,直到找到第一不为零的位置将第 一个不为零的数后(包括第一个不为零的数)的所有数按位取反(包括符号位) ;反 码为符号位为 1,数值位按位取反;移码为符号位为 0,然后从低位向高位找,直到 找到第一不为零的位置将第一个不为零的数后(包括第一个不为零的数)的所有数 按位取反(不包括符号位) 。(3)Bmjj.java

3、 定点小数变形补码加减运算算法:首先获取两个数的变形补码,获取补码的原 则是:首先判断是正数还是负数, 如果是正数, 则将“+”号去掉,然后将第一个 “0” 变成“ 00”;如果是负数,则将“ -" 号去掉, 然后从低位向高位找,直到找到第一不 为零的位置将第一个不为零的数后 (包括第一个不为零的数) 的所有数按位取反 (包 括符号位)。然后在通过按位加运算计算两个数的值,如果是减法也转换成加法做。(4)Ymcf.java 定点原码乘法:乘数的每一位分别跟被乘数的每一位相乘001*1=1,1*0|0*1|0*0=0 ,其中小数点后面的第一位为两个数的符号运算。乘数以 及被乘数转化为原

4、码形式正数直接操作,负数第一个由零变为 1 。浮点加减法根据 阶码相同阶码则后面的尾数做加减运算,阶码不相同先把阶码转化为相同的阶码, 同时改变的尾数做加减法运算。 按每一个界面的返回的时候就会转变为开始的界面。(5)Fdjj.java浮点数的加减运算:首先将两个浮点数用变形补码表示。然后进行对阶运算, 若两数的阶码相同,则可直接对两数的尾数进行加减运算,否则必须先使两数的阶 码相同,原则是将阶码小的向阶码大的看起,再对阶码小的浮点数的尾数进行移位 处理。再将两个数的尾数进行求和,并进行规格化处理,规格化处理的原则是:如 果符号位是 11 并且小数点后的第一位也是 1,则将尾数左移,直到小数点

5、后的第一 个数为 0;如果符号位是 00 并且小数点后的第一个数是 0,则进行左移处理,直到 小数点后的第一个数为 1;如果符号位是 10或 01,则将尾数右移一位。最后进行舍 入处理且判断溢出。3.3 算法实现 数据表示方法: 计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。(1)定点表示:约定机器中所有数据的小数点位置是固定的。由于约定在固定的 位置,所以小数点就不再使用记号“ . ”来表示。(2)浮点表示:定点数表示的数的范围有限,为了扩展数的表示范围,按照科学 记数法表示数据的方式,任何一个二进制数 N 都可以表示成如下的格式:N= M*2eM :尾数,是一个纯小数,决定

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

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

8、27,如果运算过程中出现 了大于 127或者小于128的情况。双符号位法: 将符号位扩展为 2位,具体说就是 对于正数两个符号位是“ 00”,对于负数两个符号位是“ 11”。两个符号位都看作数 码一样参加运算。两个数相加后,其结果的符号位出现“01”或“10”两种组合时 ,表示发生溢出。符号位符号位符号位01”,上溢出10”,下溢出00”或者“ 11”,未溢出从y 补求y 补的法则是:对y 补“包括符号位求反且最末位加1” ,即可得到-y 补 定点乘法运算 :在定点计算机中 , 两个原码表示的数相乘的运算规则是 : 乘积的符号位由两数的 3 / 21符号位按异或运算得到 , 而乘积的数值部分则

9、是两个正数相乘之积。设 n 位被乘数和 乘数用定点小数表示 ( 定点整数也同样适用 )被乘数x 原=乂 f . x n 1x 1 x 0乘数y原=y f . y n 1y 1y 0贝U乘积z 原=(x f ® y f) + (0. x n 1x 1 x 0)(0. y n jy 1 y 0) 式中,xf为被乘数符号,y f为乘数符号。机器算法: 机器中一种方法是多次采用“加法移位”的方法来完成,称为串 行乘法器,它的硬件结构简单,但是速度慢,目前广泛使用的是流水式阵列乘法器, 称为并行乘法器。无符号数 m乘以n会产生m*n个位积,出现m+n个列和,并行乘 法器的关键是快速产生 m*n

10、个位积,对位积进行相加运算产生 m+n个列和。第一步:位积的产生观察乘法运算:0*0 = 0, 0*1 = 0, 1*0 = 0, 1*1 = 1相当于:an b所以m*n个位积可以由m*n个与门并行产生。第二步:列和的产生:利用全加器浮点数的加减法运算:浮点数的加减法运算分为六个步骤:(1) 0 操作数检查浮点加减运算过程比定点运算过程复杂。如果判知两个操作数 x或y中有一个 数为 0, 即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。 0 操作数检查步骤贝用来完成这一功能。参加加法运算的数据都是非零,进入下一步。(2) 比较价码大小并完成对阶为了便于直观理解 , 假设两数均

11、以补码表示 , 阶码采用双符号位 , 尾数采用单符 号位。 两浮点数进行加减,首先要看两数的阶码是否相同,若二数阶码不同,表示 小数点位置没有对齐,此时必须使两个数阶码相同,这个过程叫作对阶。对阶操作 规定使尾数右移, 尾数右移后阶码作相应增加, 因此对阶时 , 总是使小阶向大阶看齐。(3) 尾数进行加减运算 对阶结束后,即可进行尾数的求和运算。不论加法运算还是减法运算,都按加法进行操作 (减法利用补码减法转换成补码的加法来做 ) ,其方法与定点加减法运算 完全一样。(4) 结果规格化a. 采用双符号位表示尾数时,如果两符号位为 01 或 10时,应将结果尾数右 移一位,阶码加 1(叫“右规”

12、)。b. 如果尾数最高数值位与符号位相同,应将尾数左移,阶码减1,直至数值位最高位与符号位相反(叫“左规”)。(5) 舍入运算在对阶向右规格化,尾数向右移位,这样被右移的尾数的低位部分会被丢掉, 从而造成一定误差,要进行舍入处理。简单的舍入方法有两种:一种是“ 0舍1入”法,即如果右移时被丢掉数位的最 高位为0则舍去,为1则将尾数的末位做加加1运算。另一种是“恒置T法,即只 要数位被移掉,就在尾数的末尾恒置 1。(6) 判断结果是否溢出根据补码的双符号检测溢出的方法确定阶码是否溢出。3.4运行结果(1)主界面在此界面上有口令输入框,用户必需要输入正确的口令才能正常使用 .初始密码 是6,用户若

13、输入正确,则会弹出成功对话框,若用户输入错误,则会弹出提示错误 对话框,用户用三次机会,若三次都不能正确输入,提示“您已被禁用”,此时口令框变为不可用。输入正确的密码点确定后即能直接使用。(2)定点小数机器表示窗口界面选择主窗体中“定点小数机器表示”时进入下图所示的窗体,在上面的窗体中 按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。输入一个带符号的 二进制定点小数后,按“原码”、“反码”、“补码”或“移码”按扭中的任一个后, 将在第二个文本框中显示对应的机器数,同时要求将第二个标签中“原码”字样改 成对应的编码字样。选择“返回”按扭时回到主窗体。5 / 21原码在此窗口,用户需要一个

14、二进制数,进行原码计算,例如,输入-0.1的原码结果如下图所示:,该对应反码在此窗口,用户需要一个二进制数,进行反码计算,例如,输入-0.1的反码结果如下图所示:,该对应补码,该对应在此窗口,用户需要一个二进制数,进行补码计算,例如,输入-0.1的补码结果如下图所示:移码在此窗口,用户需要一个二进制数,进行移码计算,例如,输入-0.1 ,该对应的移码结果如下图所示:(3) 定点小数的变形补码加减运算在此窗口用户需要输入两个定点小数来参加运算,同上面一样,用户必需点击 输入按钮,才能激活输入框。输入完毕,用户点击各个按钮,则会出现相应的结果, 比如,用户输入+0.01和-0.1,执行相应的操作会

15、出现相应的结果,如下图所示:7 / 21(4) 定点小数的原码乘法在此界面用户必需要输入乘数和被乘数后执行乘法操作,输入前,用户必需要点 击输入按钮才能接获输入框,如输入乘数为+0.1,被乘数为-0.1 ,执行相应的操作得出相应的结果,如下图所示:(5) 浮点数的加减法运算在此界面,用户需要输入两个浮点数的阶码和尾数,若用户输入的数中不包含 正负号,贝U无法做出任务运算,当用户输入完数据后点击相应的按钮,贝U会出现具 体的结果(本程序也包含了对溢出数据的检测),当然用户输入数据前同样要先点击 输入按钮才会激活输入框按钮,如输入第一个浮点数的阶码是+011,尾数为+0.101,第二个浮点数的阶码

16、是-001,尾数是-0.001,执行结果如下图所示:4 设计小结一周的计算机组成原理课程设计很快就结束了, 计算机组成原理是一门理论性和实践性都很 强的课程, 是计算机科学与技术的一门核心专业基础课。 从课程地位来说, 它在先导课和后续课 之间起着承上启下的作用。 只有领会计算机组成原理的算法, 并进行具体实现, 才能提高分析问 题、解决问题的综合应用能力, 才能加深理解和掌握所学的知识, 提高程序设计和软件研发能力, 所以自己做好了思想准备,这次课程设计必须独立的完成。刚看到题目就觉得这题目好简单, 实际做起来才发现, 要求实现的功能还真是挺多的, 尤其 是看到对于浮点数的加减运算, 顿时一

17、种无从下手的感觉油然而生。 但是经过仔细分析并参考一 些资料后,发现题目还是可以解决的。只是要考虑的细节有很多。从中也看出自己的基本功不够扎实, Java 语言运用不够熟练, 平时很少亲自编写算法、 上机 运行和调试过, 这值得自己认真反思一下, 不是每次考完试就把书堆着了, 很多标签控件看到的 时候我甚至都不知道它们是什么,从英文去猜,这是大大的要不得。虽然课程设计只有一个星期,但是我却受益良多。参考文献1 白中英 . 计算机组成原理(第五版) M. 北京: 科学出版社 , 2010.2 耿祥义,张跃平 .Java 2 实用教程 M. 北京:清华大学出版社 ,20169 / 215附录Ddj

18、s:package ll;import java .lan g.Object;importjava.awt.*;importjava.awt.eve nt.*;importjavax.swi ng.*;classDdjsexte ndsJFrameimpleme ntsActio nListe nerJLabellabel1,label3 , label2JTextFieldf1,f2 ; /文本框JButt onshuru , yma,fanma ,buma , yima , fanlpublic Ddjs()this .setBounds(400, 100, 600,400);this .

19、setLayout( null ); / 将布局管理 器关闭this .setResizable( false ); / 窗口大 小不许改变fanhui = new JButton("返回");fanhui.setFont(new Font( "宋体“ ,Font.BOLD,15);fan hui.setBou nds(500,320,80,30);fan hui.addActi on Liste ner(Acti onListe ner) this );yma = new JButton( "原码”);yma .setFont(new Font( &q

20、uot;宋体",Font. BOLD,15);yma .setBou nds(100,320,80,30);yma .addActio nListe ner(Actio nLis tener) this );fanma = new JButton("反码");fanma .setFont( new Font("宋体 ",Font. BOLD,15);fanma .setBounds(200,320,80,30);fanma .addActionListener(ActionL istener)this ); / 监听buma = new JBu

21、tton("补码”);buma .setFont(new Font( "宋体",Font. BOLD,15);buma .setBounds(300, 320, 80, 30);buma .addActionListener(ActionLi stener) this ); / 监听yima = new JButton("移码");yima .setFont(new Font( "宋体",Font. BOLD,15);yima .setBounds(400, 320, 80, 30);yima .addActionListe

22、ner(ActionLi stener) this );/ 监听shuru = new JButton("输入");shuru .setFont( new Font("宋体 ",Font. BOLD,15);shuru .setBounds(10, 320, 80, 30);shuru .addActi on Liste ner(Acti onListener)this ); / 监听f1 = new JTextField( ""); /text 框f2 =new JTextField( "");fl .setBo

23、unds(250, 140, 150, 20);f2 .setBounds(250, 200, 150, 20);f2 .setEditable( false );/不可编辑label1 数:") label1= new JLabel("请输入一个二进制J.setBou nds(100,100,150,100); label2= new JLabel("该数对应的原码:")Jlabel2.setBou nds(122, 197, 100,30);label3= new JLabel("定点小数的机器表示");label3 .setF

24、ont(new Font(宋体“,Fon t.BOLD,25);label3 .setBou nds(130, -20,380, 210);this.add(label1 );this.add(label2);this.add(label3);this.add(f1 );this .add( f2 );this.add(shuru )Jthis.add(fanma);this.add(yma);this.add(buma);this.add(yima );this.add(fan hui);this.setVisible(true);/激活窗口关键语句this.setDefaultCloseO

25、perati on(JFrame. EXIT_ON_CLOSE ); / 关闭窗口Overridepublic voidacti on Performed(Acti on Eve nt e) Stri ng s1 =f1 .getText().trim();if (e.getSource()= fanhui ) / win = Win dow();this .dispose。;/ 关闭当前窗口elseif (e.getSource()=shuru )f1 .setText( null );f2 .setText( null ); /点击输入 即可将 文本框清除f1 .requestFocus

26、InWin dow();elseif (e.getSource()=yma)yua nm a(s1);label2.setText("该数对应的原码:"); elseif (e.getSource()=fanma )fanm a(s1);label2.setText("的反码:"); else if (e.getSource()= buma(s1);Iabel2 .setText( else if (e.getSource()= yima(s1);label2 的移码:");private void Stri ngBuffer s = Str

27、in gBuffer(s1);if ( s.charAt(O)= s.setCharAt(O,if (s.charAt(1)= s.deleteCharAt;String shu =s.toString(); f2 .setText(shu); else if (s.charAt(O)= s.setCharAt(O, if (s.charAt(1)= s.deleteCharAt;String shu =s.toString(); f2 .setText(shu); fanm a(Stri ng newbuma)"该数对应的补码:“);yima ).setText("该数对

28、应yua nm a(Stri ng s1) new)'1''O');)'O''O''+' );)'O''O''O''1''1''1'new+''O''O');)'1'););)elseif (s.charAt(i)='O' ) s.setCharAt(i,'1' );for ( inti=s.le ngth()-1;i>1;i-

29、)if(s.charAt(i)='O'&&jin wei='O')ji nwei='O'elseif(s.charAt(i)='O'&&jin wei='1')ji nwei='O's.setCharAt(i,'1');elseif(s.charAt(i)='1'&&jin wei='O')ji nwei=else'O'if(s.charAt(i)='1'&&

30、;jin wei='1')ji nwei='1's.setCharAt(i,'O');if(s.charAt(1)='O')s.deleteCharAt(1);String shu =s.toString();f2.setText(shu);private void yima(Stri ng s1) Strin gBuffer s=newStri ngBuffer(s1);if (s.charAt(O)= '+') s.setCharAt(O,'O');si)JFrame)'+' )

31、'O''O'private void Stri ngBuffer s =Str in gBuffer(s1); if ( s.charAt(O)= s.setCharAt(O, if (s.charAt(1)= s.deleteCharAt; String shu =s.toString();f2 .setText(shu); else if (s.charAt(O)= for ( int i=s.le ngth()-1;i>1;i-)if (s.charAt(i)= s.setCharAt(i,'O'); else if (s.charA

32、t(i)= s.setCharAt(i,'1' );if (s.charAt(1)= s.deleteCharAt; s.setCharAt(O,'1');String shu =s.toString();f2 .setText(shu);private void buma(Stri ng s1) char jinwei =Stri ngBuffer s =Str in gBuffer(s1);if ( s.charAt(O)= s.setCharAt(O,if (s.charAt(1)= s.deleteCharAt;String shu =s.toStrin

33、g(); f2 .setText(shu); else if (s.charAt(O)= s.setCharAt(O, for ( inti=s.le ngth()-1;i>1;i-)if (s.charAt(i)='1' ) s.setCharAt(i,'O');else if (s.charAt(O)= '-') s.setCharAt(O,'1');if (s.charAt(1)= 'O') s.deleteCharAt(1);char zgw=s.charAt(s .len gth()-1); for

34、 ( int i=s.length()-1;i>2;i-) s.setCharAt(i,s.charAt(i-1);s.setCharAt(2, zgw);String shu =s.toString();f2 .setText(shu);Fdjj:package ll;import java.lang.Object;import java.awt.*;import java.awt.eve nt.*;importjavax.swi ng.*;public class Fdjj exte ndsimpleme ntsActi on Liste ner / Box basebox, box

35、1, box2, box3.box4, box5, box6;JButt onJButto n1, JButto n2 ,JButto n3, JButto n4 ;JLabel name, in put , in put1 , in put2, in put3, in put4 , in put5 ,in put7, in put6;JTextFielddata,data1,data2data3,data4 ,data5,data6,data7public Fdjj() Toolkit tool = getToolkit();12 / 21tool.getScree nSize();this

36、 .setBou nds(400,100,600,400);this .setLayout( n ull );JButton1= new JButton("输入");JButton1.setFont(new Font("宋体",Font. BOLD,15);JButt on1.setBou nds( 100,320,80,30);JButton2= new JButton("加法");JButton2.setFont(new Font("宋体",Font. BOLD,15);JButto n2.setBou nds

37、( 200,320,80,30);JButton3= new JButton("减法");JButton3.setFont(new Font("宋体",Font. BOLD,15);JButto n3.setBou nds( 300,320,80,30);JButton4= new JButton("返回");JButton4.setFont(new Font("宋体",Font. BOLD,15);JButton4 .setBounds( 400,320,80 , 30); name = new JLabel(

38、"浮点数的加减法运 算“,JLabel.CENTER);name .setFont(new Font( "宋体",Font. BOLD,25);name .setBounds(130,-20,300,150);in put =new JLabel("第一个数的阶码”);in put .setFo nt(new Font("宋体",Font. BOLD,15);in put .setBou nds(25,100,150,30);data = new JTextField(10);data = new JTextField( "

39、"); data .setBounds(155,105,100,20);input1 = new JLabel( "尾数:");in put1 .setF ont( new Font( " 宋体",Font. BOLD,15);in put1.setBou nds(305,105,80,20);data1 = new JTextField(10);data1 .setBou nds(355,105,150,20);input2= new JLabel("第二个数的阶码:");input2.setFont( new Font(

40、"宋体",Font. BOLD,15);in put2.setBou nds(25,150,150,30);data2 = new JTextField(10);data2 .setBou nds(155,155,100,20);input3= new JLabel( "尾数:");input3.setFont( new Font("宋体",Font. BOLD,15);in put3.setBou nds(305,155,80,20);data3 = new JTextField(10);data3 .setBou nds(355,

41、155,150,20);input4= new JLabel("加法的阶码:”);input4.setFont( new Font("宋体",Font. BOLD,15);in put4.setBou nds(55,200,100,30);data4 = new JTextField(10);data4 .setBou nds(155,205,100,20);data4 .setEditable( false );input5= new JLabel( "尾数:");input5.setFont( new Font("宋体"

42、,Font.BOLD,15);in put5.setBou nds(305,205,80,20);data5 = new JTextField(10);data5 .setBou nds(355, 205, 150,20); data5 .setEditable( false ); input6= new JLabel("减法的阶码为:”);input6.setFont( new Font("宋体",Font.BOLD,13);in put6.setBou nds(55,250,100,30);data6 = new JTextField(10);data6 .s

43、etBou nds(155,255,100, 20);data6 .setEditable( false );input7 = new JLabel( "尾数:"); input7 .setFont( new Font("宋体 ",Font. BOLD,15);in put7.setBou nds(305,255,80,20);data7 = new JTextField(10);data7 .setBou nds(355,255,150, 20);data7 .setEditable( false );JButton1.addActionListene

44、r(this);JButton2.addActionListener(this);JButton3.addActionListener(this);JButton4.addActionListener(this);this .add( name); this .add( in put );this.add(input1 );this.add(input2 );this.add(in put3);this.add(in put4);this.add(in put5);this.add(input6 );this.add(input7 );this.add(data );this.add(data

45、2 ); this.add(data1 );this.add(data3 );this.add(data5 );this.add(data6 );this.add(data7 );this.add(data4 );this.add(JButt on1);this.add(JButt on2);this.add(JButt on3);this.add(JButt on4);setVisible(true);this.setDefaultCloseOperati on(JFrame. EXIT_ON_CLOSE );String calculate(String s1,Stri ng s2) ch

46、ar ac ='O'char a1=s1.toCharArray(), a2=s2.toCharArray();s2 内容放到数组a2中for (inti = a1. length- 1; i >= 0;i-) /阶码运算if (a1i='0'&& a2i='0'&&ac ='0' ) a2i='0'Jac = '0' else if (a1i='0'&&a2i ='0'&& ac ='1&

47、#39;)a2i ='1'ac ='0'elseif(a1i= '0'&& a2i='1'&& ac='0' ) a2i='1'ac ='0'else if (a1i='1'&& a2i='0'&& ac ='0')a2i='1'ac ='0'J else if(a1i='0'&&a2i='1' &&ac='1')a2i='0'ac = '1' elseif(a1i='1'&

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1