《计算机组成原理》课程设计说明书(课题二)信息工程学院目录1 课程设计的目的 (1)2 设计内容与要求 (1)2.1 题目 (1)2.2 功能 (1)2.3 算法原理 (1)3 主要技术指标及特点 (4)3.1 登录窗体 (4)3.2操作界面 (7)3.3定点小数机器表示窗口界面 (9)3.4定点小数变形补码加减运算界面 (13)3.5定点小数的原码乘法界面 (16)3.6浮点数加减运算界面 (19)3.7帮助界面 (26)4 设计小结 (27)参考文献 (28)计算机组成原理算法实现(二)1 课程设计的目的本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力2 设计内容与要求2.1 题目计算机组成原理算法实现(二)2.2 功能能够实现定点小数的机器数表示、定点小数的变形补码加减运算、定点小数的原码一位乘法运算和浮点数的加减运算。
2.3 算法原理数据表示方法:计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。
(1)定点表示:约定机器中所有数据的小数点位置是固定的。
由于约定在固定的位置,所以小数点就不再使用记号“.”来表示。
(2)浮点表示:定点数表示的数的范围有限,为了扩展数的表示范围,按照科学记数法表示数据的方式,任何一个二进制数N都可以表示成如下的格式:N=M*2eM :尾数,是一个纯小数,决定数据的表示精度e :指数,又称为阶码,是一个整数,决定数据的表示范围数的机器码表示:一般书写所表示的数据称为真值,在计算机中为了表示符号位,通常把符号位和数字位一起编码来表示相应的数,形成了各种数据的存储和表示方法,这些编码称为机器码。
常用的机器码有原码、反码、补码和移码。
(1)原码:原码的数值部分是该数的绝对值,最高位表示符号位,最高位为0是正数,最高位为1是负数。
(2)反码:正数的反码等于原码,负数的反码等于除符号位外其余二进制数码0变成1,1变成0。
正数: [x]反 = [x]原 = x负数:符号位不变,其余变反(3)补码:正数的补码等于原码,负数的补码等于反码加1。
正数: [x]补= [x]原负数: [x]补= [x]反 +1定点加、减法运算:结论:任何两数的补码之和等于两数之和的补码❖补码加法基本公式: [x]补 + [y]补 = [x+y]补❖补码减法基本公式: [x]补 - [y]补=[x]补 + [-y]补当负数用补码表示后,符号位作为数据的一部分一起参加运算,运算器不用考虑参加加法运算的操作数的正负以及结果的正负,任意数的加法就可以化作正数加法来实现。
❖溢出:在定点数机器中,数的大小超出了定点数能表示的范围,叫溢出。
(1)在定点小数机中数的表示范围是-1<x<1,如果运算过程中出现了大于1或者小于-1的情况。
(2)在定点整数机(8位)中数的表示范围是-128<x<127,如果运算过程中出现了大于127或者小于-128的情况。
双符号位法:将符号位扩展为2位,具体说就是对于正数两个符号位是“00”,对于负数两个符号位是“11”。
两个符号位都看作数码一样参加运算。
两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。
➢符号位“01”,上溢出➢符号位“10”,下溢出➢符号位“00”或者“11”,未溢出从[y]补求[-y]补的法则是:对[y]补“包括符号位求反且最末位加1”,即可得到[-y]补定点乘法运算:在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。
设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个与门并行产生。
第二步:列和的产生:利用全加器浮点数的加减法运算:浮点数的加减法运算分为六个步骤:(1)0操作数检查浮点加减运算过程比定点运算过程复杂。
如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。
0操作数检查步骤则用来完成这一功能。
参加加法运算的数据都是非零,进入下一步。
(2)比较价码大小并完成对阶为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位。
两浮点数进行加减,首先要看两数的阶码是否相同,若二数阶码不同,表示小数点位置没有对齐,此时必须使两个数阶码相同,这个过程叫作对阶。
对阶操作规定使尾数右移,尾数右移后阶码作相应增加,因此对阶时,总是使小阶向大阶看齐。
(3)尾数进行加减运算对阶结束后,即可进行尾数的求和运算。
不论加法运算还是减法运算,都按加法进行操作(减法利用补码减法转换成补码的加法来做),其方法与定点加减法运算完全一样。
(4)结果规格化a. 采用双符号位表示尾数时,如果两符号位为01或10时,应将结果尾数右移一位,阶码加1(叫“右规”)。
b. 如果尾数最高数值位与符号位相同,应将尾数左移,阶码减1,直至数值位最高位与符号位相反(叫“左规”)。
(5)舍入运算在对阶向右规格化,尾数向右移位,这样被右移的尾数的低位部分会被丢掉,从而造成一定误差,要进行舍入处理。
简单的舍入方法有两种:一种是“0舍1入”法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位做加加1运算。
另一种是“恒置1”法,即只要数位被移掉,就在尾数的末尾恒置1。
(6)判断结果是否溢出根据补码的双符号检测溢出的方法确定阶码是否溢出。
3 主要技术指标及特点针对题目的各个功能要求,本人将程序分为一个主模块ZuCheng和六个子模块分别为Password、Show、Form3、Form4、Form5、Help。
显然这是一个典型的使用模块化结构的程序。
所有独立功能的部分都采用子模块结构,因为模块化设计使人一目了然。
下面将介绍主模块和各子模块的运用特点和参数说明,并给出他们的流程图和主要Java代码。
3.1 登录窗体口令输入错误时给出重新输入口令的提示三次口令输入错误被禁止使用Password模块流程图开始是否退出密码是否正确进入操作菜单是否已输入三次结束输入密码密码被禁用否是是是是否Password模块的主要Java代码public void actionPerformed(ActionEvent e){String s = new String("123"if (e.getSource() == button1){while (i == 0 && m <= 3 && (!(text1.getText().equals("")))){if (text1.getText().equals(s)){i = 1;}else{m++;JOptionPane.showMessageDialog(this, "您输入的密码不正确", "警告对话框",JOptionPane.W ARNING_MESSAGE);text1.setText(null);}}if (m > 3){JOptionPane.showMessageDialog(this, "您已被禁用", "错误对话框",JOptionPane.ERROR_MESSAGE);}}if (e.getSource() == button2){setVisible(false);}if (i == 1){ZuCheng s1 = new ZuCheng("操作菜单");s1.setVisible(true);setVisible(false);}}3.2操作界面通过ZuCheng 主模块,调用Show 、Form3、Form4、Form5、Help 子模块。
当选择对应子模块的按钮就可以调用各个子模块,而各子模块之间是相互独立的,下面用模块图来表示程序模块间的调用关系:(箭头起始处模块调用箭头指向处模块)PasswordHelp Foram3Form3ZuChengForm4ShowZucheng模块流程图Zucheng模块的主要Java代码public void actionPerformed(ActionEvent e){if(e.getSource()==m1){Show s1=new Show("机器数表示");s1.setVisible(true);}else if(e.getSource()==m2){Form3 f1=new Form3();f1.setTitle("定点变形补码加减");f1.setVisible(true);}else if(e.getSource()==m3){Form4 f2=new Form4(); f2.setTitle("定点原码乘法"); f2.setVisible(true);}else if(e.getSource()==m4){Form5 f5=new Form5("浮点加减");f5.setVisible(true);}else if(e.getSource()==m5){Help h1=new Help("帮助信息");h1.setVisible(true);h1.work();}}3.3定点小数机器表示窗口界面在上面的窗体中按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。
输入一个带符号的二进制定点小数(如+0.11010或-0.010101)后,按“原码”、“反码”、“补码”或“移码”按扭中的任一个后,将在第二个文本框中显示对应的机器数,同时要求将第二个标签中“原码”字样改成对应的编码字样。
选择“返回”按扭时回到主窗体。