计算机组成原理算法实现 D计算机121夏凌副本.docx
- 文档编号:3466420
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:44
- 大小:355.65KB
计算机组成原理算法实现 D计算机121夏凌副本.docx
《计算机组成原理算法实现 D计算机121夏凌副本.docx》由会员分享,可在线阅读,更多相关《计算机组成原理算法实现 D计算机121夏凌副本.docx(44页珍藏版)》请在冰豆网上搜索。
计算机组成原理算法实现D计算机121夏凌副本
组成原理课程设计报告
专业
计算机科学与技术
学生姓名
夏凌
班级
D计算机121
学号
1220704132
指导教师
花小朋
完成日期
2015年1月21日
计算机组成原理算法实现(三)
一、课程设计的目的
本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。
二、课程设计内容
题目:
计算机组成原理算法实现(三)
功能:
能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。
三、功能设计与实现
1.主窗体
登陆窗口流程图
系统进入(主)窗体的设计:
菜单需要在输入口令正确后方可激活使用。
如下图:
口令输入错误时给出重新输入口令的提示,如下图:
三次口令输入错误应该禁止使用,如下图:
输入密码正确之后,如下图:
2.二进制数逻辑运算窗体
二进制数逻辑运算流程图
在上面的窗体中按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。
依次输入两个(或一个)二进制数后,按“逻辑非”、“逻辑加”、“逻辑乘”或“逻辑异”按扭中的任一个后,将在第三个文本框中显示对应操作的结果。
选择“返回”按扭时回到主窗体。
选择主窗体中“逻辑运算”时进入下图所示的窗体:
3.定点整数单符号位补码加减法运算窗体
定点整数单符号位补码加减法流程图
选择主窗体中“定点整数单符号位补码加减”时进入下图所示的窗体:
定点加、减法运算:
结论:
任何两数的补码只和等于两数只和的补码
补码加法基本公式:
[x]补+[y]补=[x+y]补
补码减法基本公式:
[x]补-[y]补=[x]补+[-y]补
当负数用补码表示后,符号位作为数据的一部分一起参加运算,运算器不用考虑参加加法运算的操作数的正负以及结果的正负,任意数的加法就可以化作正数加法来作。
溢出:
在定点数机器中,数的大小超出了定点数能表示的范围,叫溢出。
(1)在定点小数机中数的表示范围是-1 (2)在定点整数机(8位)中数的表示范围是-128 双符号位法: 将符号位扩展为2位,具体说就是对于正数两个符号位是“00”,对于负数两个符号位是“11”。 两个符号位都看作数码一样参加运算。 两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。 符号位“01”,上溢出 符号位“10”,下溢出 符号位“00”或者“11”,未溢出 从[y]补求[-y]补的法则是: 对[y]补“包括符号位求反且最末位加1”,即可得到[-y]补。 4.定点整数单原码一位乘法运算窗体 定点整数的原码乘法窗体流程图 进行定点整数单符号位补码加减法、定点整数原码乘法、浮点加减法的实现时都是在主窗体选择对应的菜单项后进入对应窗体再进行具体操作。 操作时首先选择“输入”按扭输入参与运算的数据,然后再选操作按扭。 选择主窗体中“定点整数单原码一位乘法”时进入下图所示的窗体: 定点乘法运算: 在定点计算机中,两个原码表示的数相乘的运算规则是: 乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。 设n位被乘数和乘数用定点小数表示(定点整数也同样适用) 被乘数 [x]原=xf.xn-1…x1x0 乘数 [y]原=yf.yn-1…y1y0 则乘积 [z]原=(xf⊕yf)+(0.xn-1…x1x0)(0.yn-1…y1y0) 式中,xf为被乘数符号,yf为乘数符号。 机器算法: 机器中一种方法是多次采用”加法-移位“的方法来完成,称为串行乘法器,它的硬件结构简单,但是速度慢,目前广泛使用的是流水式阵列乘法器,称为并行乘法器。 无符号数m乘以n会产生m*n个位积,出现m+n个列和,并行乘法器的关键是快速产生m*n个位积,对位积进行相加运算产生m+n个列和。 第一步: 位积的产生 观察乘法运算: 0*0=0,0*1=0,1*0=0,1*1=1 相当于: a∩b 所以m*n个位积可以由m*n个与门并行产生。 第二步: 列和的产生: 利用全加器 5.浮点数的加减法运算窗体 进行定点整数单符号位补码加减法、定点整数原码乘法、浮点加减法的实现时都是在主窗体选择对应的菜单项后进入对应窗体再进行具体操作。 操作时首先选择“输入”按扭输入参与运算的数据,然后再选操作按扭。 选择主窗体中“浮点加减法”时进入下图所示的窗体: 浮点数的加减法运算: 浮点数的加减法运算分为六个步骤: (1)0操作数检查 浮点加减运算过程比定点运算过程复杂。 如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。 0操作数检查步骤则用来完成这一功能。 参加加法运算的数据都是非零,进入下一步。 (2)比较价码大小并完成对阶 为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位。 两浮点数进行加减,首先要看两数的阶码是否相同,若二数阶码不同,表示小数点位置没有对齐,此时必须使二数阶码相同,这个过程叫作对阶。 对阶操作规定使尾数右移,尾数右移后阶码作相应增加,因此对阶时,总是使小阶向大阶看齐。 (3)尾数进行加减运算 对阶结束后,即可进行尾数的求和运算。 不论加法运算还是减法运算,都按加法进行操作(减法利用补码减法转换成补码的加法来做),其方法与定点加减法运算完全一样。 (4)结果规格化 a.采用双符号位表示尾数时,如果两符号位为01或10时,应将结果尾数右移一位,阶码加1(叫“右规”)。 b.如果尾数最高数值位与符号位相同,应将尾数左移,阶码减1,直至数值位最高位与符号位相反(叫“左规”)。 (5)舍入运算 在对阶向右规格化,尾数向右移位,这样被右移的尾数的低位部分会被丢掉,从而造成一定误差,要进行舍入处理。 简单的舍入方法有两种: 一种是“0舍1入”法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位做加加1运算。 另一种是“恒置1”法,即只要数位被移掉,就在尾数的末尾恒置1。 (6)判断结果是否溢出 阶码为00011,阶码的符号位为00,根据补码的双符号检测溢出的方法确定阶码不溢出。 4.设计小结 经过一周计算机组成原理课程设计,使得我对于逻辑运算的理解进一步加深。 对计算机组成原理中的知识有了全新的认识。 之前的学习仅仅是理论上的,这次的课程设计让我充分理解了之前的所学内容,更深层次地理解了组成原理的内容,为以后的运用打下坚实的基础。 本次课程设计主要用的是NetBeans用JAVA语言编写,通过对这些工具的使用,书本上的知识远远不够,上机实践以后的进一步深层次的理解,使得我么所学的知识更加牢固。 一般的逻辑运算,自己通过通过计算就能得出结果,而通过计算机加以实现却没那么简单,通过实践发现其中集合了很多我们平时忽略的内容,让我温习了一次书本知识点,对于自己不会的内容,我也能充分地利用网络的方便快捷,给自己节约了不少时间。 在此实训上自主能力上得到了提高,真正地做到了学以致用,更学到了很多做人的道理,对我来说受益非浅。 在实践能力上也得到了提高,真正地做到了学以致用,更学到了很多做人的道理,对我来说受益非浅。 除此以外,我还学会了如何更好地与别人沟通,如何更好地去陈述自己的观点,如何说服别人认同自己的观点。 第一次亲身感受到理论与实际的相结合,让我大开眼界。 也是对以前所学知识的一个初审吧! 这次实训对于我以后学习、找工作也真是受益菲浅,在短短的几天中相信这些宝贵的经验会成为我今后成功的重要的基石。 本次计算机组成原理课程设计,在老师指导和同学们的帮助下,我深化了解了计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。 附件 Main类: publicclassMain{ publicstaticvoidmain(Stringargs[]){ newNewclass(null); } } Newclass类: importjava.awt.*; importjava.awt.event.*; importjavax.swing.JOptionPane; publicclassNewclassextendsFrameimplementsActionListener{ staticinti=0; staticintm=1; Labela1,a2,a22; TextFieldtext1; Buttonbutton1,m1,m2,m3,m4,m5; Fontf; Newclass(Strings){ super(s); setLayout(null); f=newFont("楷体",Font.BOLD,20); m1=newButton("逻辑运算"); m2=newButton("定点整数单符号位补码加减运算"); m3=newButton("定点整数的原码一位乘法"); m4=newButton("浮点的加减运算"); m5=newButton("帮助"); m1.addActionListener(this); m2.addActionListener(this); m3.addActionListener(this); m4.addActionListener(this); m5.addActionListener(this); m1.setBounds(5,30,90,25); m2.setBounds(100,30,190,25); m3.setBounds(300,30,180,25); m4.setBounds(490,30,120,25); m5.setBounds(620,30,70,25); add(m1); add(m2); add(m3); add(m4); add(m5); a1=newLabel("计算机组成原理算法实现(三)",Label.CENTER); a2=newLabel("输入口令: "); a22=newLabel("密码正确",Label.CENTER); a1.setBounds(200,100,300,40); a1.setBackground(Color.green); a1.setFont(f); a2.setBounds(200,200,60,25); a2.setBackground(Color.orange); a22.setBounds(250,200,200,25); a22.setForeground(Color.white); a22.setBackground(Color.blue); a22.setVisible(false); text1=newTextField(18); text1.setEchoChar('*'); text1.setBounds(300,200,200,25); button1=newButton("确认"); button1.setBounds(300,250,70,30); button1.addActionListener(this); add(a1); add(a2); add(a22); add(text1); add(button1); setBackground(Color.white); setBounds(200,200,710,400); setVisible(true); validate(); addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); } }); } publicstaticvoidmain(Stringargs[]){ newNewclass("计算机组成原理"); } publicvoidactionPerformed(ActionEvente){ Strings=newString("2"); if(e.getSource()==button1){ while(i==0&&m<=3&&(! (text1.getText().equals("")))){ if(text1.getText().equals(s)){ i=1; JOptionPane.showMessageDialog(this,"口令正确,请选择菜单栏的操作", "正确",JOptionPane.INFORMATION_MESSAGE); text1.setEnabled(false); text1.setVisible(false); a22.setVisible(true); a2.setVisible(false); }else{ m++; JOptionPane.showMessageDialog(this,"您输入的口令不正确","警告", JOptionPane.WARNING_MESSAGE); text1.setText(null); } } if(m>3){ JOptionPane.showMessageDialog(this,"您三次口令错误,确定后退出! ","警告", JOptionPane.ERROR_MESSAGE); System.exit(0); } } if(i==1){ if(e.getSource()==m1){ Form2s1=newForm2("逻辑运算"); s1.setVisible(true); }elseif(e.getSource()==m2){ Form3f1=newForm3(); f1.setTitle("定点整数单符号位补码加减"); f1.setVisible(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); } } } } Form2类: importjava.awt.*; importjavax.swing.JOptionPane; importjavax.swing.*; importjava.awt.event.*; publicclassForm2extendsJFrameimplementsActionListener { intme=0; JLabelb1,b2,b3,b4;Fontf; JTextFieldt1,t2,t3; JButtonbutton1,button2,button3,button4,button5,button6; Form2(Strings) { super(s);setLayout(null); f=newFont("楷体",Font.BOLD,20); b1=newJLabel("逻辑运算",JLabel.CENTER); b2=newJLabel("请输入第一个数: "); b3=newJLabel("请输入第二个数: "); b4=newJLabel("结果: "); b1.setBounds(180,30,250,40); b1.setFont(f); b1.setBackground(Color.white); b2.setBounds(100,120,120,25); b3.setBounds(100,150,120,25); b2.setBackground(Color.white); b3.setBackground(Color.white); b4.setBounds(100,180,120,25); t1=newJTextField(15); t2=newJTextField(15); t3=newJTextField(15); t1.setBounds(250,120,200,25); t2.setBounds(250,150,200,25); t3.setBounds(250,180,200,25); button1=newJButton("输入");button2=newJButton("逻辑非"); button3=newJButton("逻辑加");button4=newJButton("逻辑乘"); button5=newJButton("逻辑异");button6=newJButton("返回"); button1.setBounds(60,300,80,25);button2.setBounds(140,300,80,25); button3.setBounds(220,300,80,25);button4.setBounds(300,300,80,25); button5.setBounds(380,300,80,25);button6.setBounds(460,300,80,25); setBounds(100,100,600,400); setBackground(Color.white); add(b1);add(b2);add(b3);add(b4);add(t1);add(t2);add(t3);add(button1);add(button2);add(button3);add(button4); add(button5);add(button6); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); button5.addActionListener(this); button6.addActionListener(this); validate(); addWindowListener(newWindowAdapter() {publicvoidwindowClosing(WindowEvente) {setVisible(false);} }); } publicvoidactionPerformed(ActionEvente) { if(e.getSource()==button1) {me=1; t1.requestFocusInWindow(); } if(e.getSource()==button2) { b4.setText("逻辑非: "); Stringsg=t1.getText(); intindex=sg.indexOf("+"); intl=sg.length(); StringBuffers=newStringBuffer(sg); for(inti=0;i { if(s.charAt(i)=='0') s.setCharAt(i,'1'); else s.setCharAt(i,'0'); } Stringss=s.substring(index+1); t3.setText(ss); } elseif(e.getSource()==button3) { b4.setText("逻辑加: "); Stringsg=t1.getText(); Stringsg2=t2.getText(); if(sg.length()! =sg2.length()) { JOptionPane.showMessageDialog(this,"您输入的两个参数长度不一样","警告对话框",JOptionPane.WARNING_MESSAGE); } else{ intindex=sg.indexOf("+"); StringBuffers=newStringBuffer(sg); StringBuffers2=newStringBuffer(sg2); for(inti=0;i { if(s.charAt(i)=='1'||s2.charAt(i)=='1') s.setCharAt(i,'1'); else s.setCharAt(i,'0'); } Stringss=s.substring(index+1); t3.setText(ss); } } elseif(e.getSource()==button4) { b4.setText("该数逻辑乘为: "); Stringsg=t1.getText(); Stringsg2=t2.getText();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机组成原理算法实现 D计算机121 夏凌 副本 计算机 组成 原理 算法 实现 121