版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、组成原理课程设计报告( 2012 - 2013年度第2学期)计算机组成原理算法实现(二)专业学生姓名班级学号指导教师完成日期目 录1 设计目的12 设计内容13 实现方法13.1 系统目标13.2 主体功能33.3 开发环境34 小结5附录6附录1 源程序清单6计算机组成原理算法实现(一)1设计目的本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。2设计内容计算机组成原理算法实现(二):能够实现定点小数的机器数表示、定点小数的变形补码加
2、减运算、定点小数的原码乘法运算和浮点数的加减运算。3 实现方法3.1系统目标(1)系统进入主界面后:菜单需要在输入口令正确后方可激活使用。口令输入错误时要给出重新输入口令的提示,三次口令输入错误应该禁止使用。(2)从主界面中点击相应的菜单可以进入对应的算法演示界面。(3)实现定点小数的机器数表示,对于正数的定点小数,它的原码、补码、反码为它本身;移码为最高符号位变为1,其他位保持不变。对于负数的原码为最高符号位为一,数值位保持不变;补码为从低位向高位找,直到找到第一不为零的位置将第一个不为零的数后(包括第一个不为零的数)的所有数按位取反(包括符号位);反码为符号位为1,数值位按位取反;移码为符
3、号位为0,然后从低位向高位找,直到找到第一不为零的位置将第一个不为零的数后(包括第一个不为零的数)的所有数按位取反(不包括符号位)。(4)定点小数变形补码加减运算算法:首先获取两个数的变形补码,获取补码的原则是:首先判断是正数还是负数,如果是正数,则将“+”号去掉,然后将第一个“0”变成“00”;如果是负数,则将“-"号去掉,然后从低位向高位找,直到找到第一不为零的位置将第一个不为零的数后(包括第一个不为零的数)的所有数按位取反(包括符号位)。然后在通过按位加运算计算两个数的值,如果是减法也转换成加法做。(5)定点原码乘法:乘数的每一位分别跟被乘数的每一位相乘,1*1=1,1*0|0
4、*1|0*0=0,其中小数点后面的第一位为两个数的符号运算。乘数以及被乘数转化为原码形式正数直接操作,负数第一个由零变为1 。浮点加减法根据阶码相同阶码则后面的尾数做加减运算,阶码不相同先把阶码转化为相同的阶码,同时改变的尾数做加减法运算。按每一个界面的返回的时候就会转变为开始的界面。(6)浮点数的加减运算:首先将两个浮点数用变形补码表示。然后进行对阶运算,若两数的阶码相同,则可直接对两数的尾数进行加减运算,否则必须先使两数的阶码相同,原则是将阶码小的向阶码大的看起,再对阶码小的浮点数的尾数进行移位处理。再将两个数的尾数进行求和,并进行规格化处理,规格化处理的原则是:如果符号位是11并且小数点
5、后的第一位也是1,则将尾数左移,直到小数点后的第一个数为0;如果符号位是00并且小数点后的第一个数是0,则进行左移处理,直到小数点后的第一个数为1;如果符号位是10或01,则将尾数右移一位。最后进行舍入处理且判断溢出。系统流程图如下:开始密码正确否定点小数的机器表示定点小数的变形补码加减运算定点小数的原码乘法运算浮点数的加减运算正确退出密码连续输入错误三次密码连续输入错误三次以内重新输入错误3.2主体功能1)详细设计数据表示方法:计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。(1)定点表示:约定机器中所有数据的小数点位置是固定的。由于约定在固定的位置,所以小数点就不再使用记号“
6、.”来表示。(2)浮点表示:定点数表示的数的范围有限,为了扩展数的表示范围,按照科学记数法表示数据的方式,任何一个二进制数N都可以表示成如下的格式:NM*2eM :尾数,是一个纯小数,决定数据的表示精度e :指数,又称为阶码,是一个整数,决定数据的表示范围数的机器码表示:一般书写所表示的数据称为真值,在计算机中为了表示符号位,通常把符号位和数字位一起编码来表示相应的数,形成了各种数据的存储和表示方法,这些编码称为机器码。常用的机器码有原码、反码、补码和移码。(1)原码:原码的数值部分是该数的绝对值,最高位表示符号位,最高位为0是正数,最高位为1是负数。(2)反码:正数的反码等于原码,负数的反码
7、等于除符号位外其余二进制数码0变成1,1变成0。正数: x反 = x原 = x负数: 符号位不变,其余变反(3)补码:正数的补码等于原码,负数的补码等于反码加1。正数: x补= x原负数: x补= x反 +1定点加、减法运算:结论:任何两数的补码之和等于两数之和的补码补码加法:基本公式: x补 + y补 = x+y补补码减法:基本公式: x补 - y补x补 + -y补当负数用补码表示后,符号位作为数据的一部分一起参加运算,运算器不用考虑参加加法运算的操作数的正负以及结果的正负,任意数的加法就可以化作正数加法来实现。溢出:在定点数机器中,数的大小超出了定点数能表示的范围,叫溢出。a.在定点小数机
8、中数的表示范围是-1<x<1,如果运算过程中出现了大于1或者小于1的情况。b.在定点整数机(8位)中数的表示范围是-128<x<127,如果运算过程中出现了大于127或者小于128的情况。双符号位法:将符号位扩展为2位,具体说就是对于正数两个符号位是“00”,对于负数两个符号位是“11”。两个符号位都看作数码一样参加运算。两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。符号位“01”,上溢出符号位“10”,下溢出符号位“00”或者“11”,未溢出从补求补的法则是:对补“包括符号位求反且最末位加1”,即可得到补定点乘法运算 :在定点计算机中,两
9、个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示(定点整数也同样适用)被乘数 原f .n110乘数原f .n110则乘积原(ff)(0.n110)(0.n110)式中,f为被乘数符号,f为乘数符号。机器算法: 机器中一种方法是多次采用“加法移位”的方法来完成,称为串行乘法器,它的硬件结构简单,但是速度慢,目前广泛使用的是流水式阵列乘法器,称为并行乘法器。无符号数m乘以n会产生m*n个位积,出现m+n个列和,并行乘法器的关键是快速产生m*n个位积,对位积进行相加运算产生m+n个列和。第一步:位积的产生
10、观察乘法运算:0*00,0*10,1*00,1*11,相当于:ab所以m*n个位积可以由m*n个与门并行产生。第二步:列和的产生:利用全加器浮点数的加减法运算:浮点数的加减法运算分为六个步骤:(1)0操作数检查浮点加减运算过程比定点运算过程复杂。如果判知两个操作数或中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。0操作数检查步骤则用来完成这一功能。参加加法运算的数据都是非零,进入下一步。(2)比较价码大小并完成对阶为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位。 两浮点数进行加减,首先要看两数的阶码是否相同,若二数阶码不同,表示小数点
11、位置没有对齐,此时必须使两个数阶码相同,这个过程叫作对阶。对阶操作规定使尾数右移,尾数右移后阶码作相应增加,因此对阶时,总是使小阶向大阶看齐。(3)尾数进行加减运算对阶结束后,即可进行尾数的求和运算。不论加法运算还是减法运算,都按加法进行操作(减法利用补码减法转换成补码的加法来做),其方法与定点加减法运算完全一样。(4)结果规格化a. 采用双符号位表示尾数时,如果两符号位为01或10时,应将结果尾数右移一位,阶码加1(叫“右规”)。b. 如果尾数最高数值位与符号位相同,应将尾数左移,阶码减,直至数值位最高位与符号位相反(叫“左规”)。(5)舍入运算在对阶向右规格化,尾数向右移位,这样被右移的尾
12、数的低位部分会被丢掉,从而造成一定误差,要进行舍入处理。简单的舍入方法有两种:一种是“0舍1入”法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位做加加1运算。另一种是“恒置1”法,即只要数位被移掉,就在尾数的末尾恒置1。(6)判断结果是否溢出根据补码的双符号检测溢出的方法确定阶码是否溢出。2)具体设计(1)判定用户登录合法性。用户在使用算法演示系统前需要输入正确的密码,若密码正确将提示“密码输入正确,欢迎使用组成原理算法演示系统!”,此时菜单项变为可用。若用户输入的密码错误,系统将提示“密码输入错误,请重新输入!”。若用户连续三次输错密码,系统将提示“密码输入错误三次,程序将自
13、动关闭!”密码输入正确、错误和错误三次以上的情况如图1、2、3所示:图1密码输入正确图2 密码输入错误图3 密码输入错误三次以上(2)定点小数机器表示用户在主界面上点击“定点小数机器表示”菜单,进入定点小数机器表示演示模块。用户点击“输入”按钮,输入一个二进制定点小数,按“原码”、“反码”、“补码”、“移码”按钮后,会输入相应的机器数值,如图4所示。图4定点小数的机器表示(3)定点小数的变形补码运算用户在主界面点击“定点小数的变形补码运算”菜单,进入定点小数的变形补码运算模块。用户点击输入按钮,输入两个参与运算的二进制定点小数,按“加法”按钮,程序会在对应的输出框中输出变形补码加运算的值,按“
14、减法”按钮,程序会在对应的输出框中输出变形补码减运算的值,如图5所示。所计算过程中发生溢出,程序将给出正溢出或负溢出提示,如图6所示。图5定点小数的变形补码加减运算图6发生溢出(4)定点小数的原码乘法用户在主界面点击“定点小数的原码乘法”菜单,进入定点小数的原码乘法演示模块。用户点击输入按钮,输入两个参与运算的二进制定点小数,按“乘法”按钮,程序会在对应的输出框中输出原码乘法运算的值,结果如图7所示。图7定点小数的原码乘法(5)浮点数的加减运算用户在主界面点击“浮点数的加减运算”菜单,进入浮点数的加减运算模块。用户点击输入按钮,输入参与运算的两个浮点数的阶码和尾数值(阶码形如+010、-011
15、等,尾数形如+0.1010101、-0.11110101等),按“加法”按钮,程序会在对应的输出框中输出浮点数加运算的阶码和尾数值,按“减法”按钮,程序会在对应的输出框中输出浮点数减运算的阶码和尾数值,如图8所示。图8浮点数的加减运算(6)帮助对于不熟悉系统的用户,在输入密码前便可以点击帮助按钮,获取相关的使用说明。如图9所示。图9帮助3.3 开发环境Microsoft Visual C+ 6.0集成环境。4小结通过这次课程设计,使我对于计算机组成原理中有关于定点小数的相关计算和浮点数的计算有了更深层次的了解,从原理上了解了定点小数的机器表示,定点小数变形补码加减法,定点小数原码乘法和浮点数的
16、加减法,有助于今后的学习。最后,课程设计让我们将所学的理论知识与实践结合起来,提高了我的编程能力,增强了学习计算机科学的决心和信心,使我敢于挑战更加庞大复杂的程序编制任务,同时也认识到了自己学习中的不足,在今后的进一步学习中加以改正。附 录附录1 源程序清单IDD_DIALOGvoid CWeiyangDlg:OnOk() / TODO: Add your control notification handler code hereif(js<3)CString str;GetDlgItemText(IDC_EDIT1,str);if(strcmp(str,"111070422
17、7")=0)m_button1.EnableWindow(TRUE);m_button2.EnableWindow(TRUE);m_button5.EnableWindow(TRUE);m_button6.EnableWindow(TRUE);m_button7.EnableWindow(TRUE);m_1.EnableWindow(FALSE);js=0;elseMessageBox("密码错误!");js+;elseMessageBox("输入密码错误次数超过3次");void CWeiyangDlg:OnButton1() / TODO:
18、 Add your control notification handler code hereCTUBINUM1 *dlg=new CTUBINUM1; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG1);dlg->ShowWindow(1);void CWeiyangDlg:OnButton2() / TODO: Add your control notification handler code hereCDialog2 *dlg=new CDialog2; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG2);
19、dlg->ShowWindow(1);void CWeiyangDlg:OnButton5() / TODO: Add your control notification handler code hereCDialog3 *dlg=new CDialog3; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG3);dlg->ShowWindow(1);void CWeiyangDlg:OnButton6() / TODO: Add your control notification handler code hereCDialog4 *dlg=ne
20、w CDialog4; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG4);dlg->ShowWindow(1);void CWeiyangDlg:OnButton7() / TODO: Add your control notification handler code hereCDialog5 *dlg=new CDialog5; dlg->Create(MAKEINTRESOURCE(IDD_DIALOG5);dlg->ShowWindow(1);void CWeiyangDlg:OnQx() / TODO: Add your con
21、trol notification handler code hereCDialog:OnCancel();void CAboutDlg:OnOK() / TODO: Add extra validation hereCDialog:OnOK();IDD_DIALOG1BEGIN_MESSAGE_MAP(CTUBINUM1, CDialog)/AFX_MSG_MAP(CTUBINUM1)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON3, OnBu
22、tton3)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON8, OnButton8)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CTUBINUM1 message handlersvoid CTUBINUM1:OnButton1() / TODO: Add your control notification handler code hereCEdit *editText1 = (CEdit *)GetDlgItem(IDC_EDIT1);editText1->SetFocus();void C
23、TUBINUM1:OnButton2()CString str; GetDlgItemText(IDC_EDIT1,str); /用GetDlgItemText(文本框ID,字符串),将文本框内容存放到字符串中.CString symbol = str.Left(1);CString result=str;if(symbol.Compare("+")=0) result.Replace("+0", "0");else if(symbol.Compare("-")=0) result.Replace("-0
24、", "1");SetDlgItemText(IDC_EDIT2, result);void CTUBINUM1:OnButton3() CString str; GetDlgItemText(IDC_EDIT1,str); /用GetDlgItemText(文本框ID,字符串),将文本框内容存放到字符串中.CString symbol = str.Left(1);CString result=str;if(symbol.Compare("+")=0) result.Replace("+0", "0");
25、else if(symbol.Compare("-")=0) result.Replace("-0", "1");int length=result.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result.GetAt(i);b='1'-a;if(b=0)result.SetAt(i,'0');elseresult.SetAt(i,'1');SetDlgItemText(IDC_
26、EDIT2, result);void CTUBINUM1:OnButton4() / TODO: Add your control notification handler code hereCString str; GetDlgItemText(IDC_EDIT1,str); /用GetDlgItemText(文本框ID,字符串),将文本框内容存放到字符串中.CString symbol = str.Left(1);CString result=str;if(symbol.Compare("+")=0) result.Replace("+0", &q
27、uot;0");else if(symbol.Compare("-")=0) result.Replace("-0", "1");int length=result.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result.GetAt(i);b='1'-a;if(b=0)result.SetAt(i,'0');elseresult.SetAt(i,'1');a=resu
28、lt.GetAt(length-1);if(a='0')result.SetAt(length-1,'1');elsefor(i=length-1;result.GetAt(i)!='0'i-)result.SetAt(i,'0');result.SetAt(i,'1');SetDlgItemText(IDC_EDIT2, result);void CTUBINUM1:OnButton8() / TODO: Add your control notification handler code hereCString
29、 str; GetDlgItemText(IDC_EDIT1,str); /用GetDlgItemText(文本框ID,字符串),将文本框内容存放到字符串中.CString symbol = str.Left(1);CString result=str;if(symbol.Compare("+")=0) result.Replace("+0", "1");else if(symbol.Compare("-")=0) result.Replace("-0", "0");int
30、length=result.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result.GetAt(i);b='1'-a;if(b=0)result.SetAt(i,'0');elseresult.SetAt(i,'1');a=result.GetAt(length-1);if(a='0')result.SetAt(length-1,'1');elsefor(i=length-1;result.GetAt(i
31、)!='0'i-)result.SetAt(i,'0');result.SetAt(i,'1');SetDlgItemText(IDC_EDIT2, result);IDD_DIALOG2void CDialog2:OnIn() / TODO: Add your control notification handler code hereCEdit *editText1 = (CEdit *)GetDlgItem(IDC_EDIT1);editText1->SetFocus();void CDialog2:OnAdd() / TODO: A
32、dd your control notification handler code hereCString str1,str2; GetDlgItemText(IDC_EDIT1,str1);GetDlgItemText(IDC_EDIT2,str2);/用GetDlgItemText(文本框ID,字符串),将文本框内容存放到字符串中.CString symbol = str1.Left(1);CString symbol1 = str2.Left(1);str1.Delete(1,2);str2.Delete(1,2);CString result=str1;CString result1=
33、str2;if(symbol.Compare("+")=0) result.Replace("+", "00");else if(symbol.Compare("-")=0) result.Replace("-", "11");int length=result.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result.GetAt(i);b='1'-a
34、;if(b=0)result.SetAt(i,'0');elseresult.SetAt(i,'1');a=result.GetAt(length-1);if(a='0')result.SetAt(length-1,'1');elsefor(i=length-1;result.GetAt(i)!='0'i-)result.SetAt(i,'0');result.SetAt(i,'1');if(symbol1.Compare("+")=0) result1.Repl
35、ace("+", "00");else if(symbol1.Compare("-")=0) result1.Replace("-", "11");int length=result1.GetLength();char a='0',b='0'int i=2;for(;i<=length-1;i+)a=result1.GetAt(i);b='1'-a;if(b=0)result1.SetAt(i,'0');elseresult1
36、.SetAt(i,'1');a=result1.GetAt(length-1);if(a='0')result1.SetAt(length-1,'1');elsefor(i=length-1;result1.GetAt(i)!='0'i-)result1.SetAt(i,'0');result1.SetAt(i,'1');/对两个操作数求补的过程IDD_DIALOG3CDialog3:CDialog3(CWnd* pParent /*=NULL*/): CDialog(CDialog3:IDD, p
37、Parent)/AFX_DATA_INIT(CDialog3)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INITvoid CDialog3:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CDialog3)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CDialog3, C
38、Dialog)/AFX_MSG_MAP(CDialog3)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CDialog3 message handlersvoid CDialog3:OnCancel() / TODO: Add extra cleanup hereCDialog:OnCancel();IDD_DIALOG4void CDialog4:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CDialog4)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CDialog4, CDialog)/AFX_MSG_MAP(CDialog4)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON9, OnButton9)/AFX_MSG_MAPEND_M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客户档案信息保密管理执行规范
- 防洪防汛专项应急保障方案
- 艾灸温通疗法禁忌症安全指引
- 环保设施第三方运维管理考核办法
- 化工园区消防疏散实战演练方案
- 安全风险告知卡制作标准
- 脉诊技术操作服务规范
- 员工排班制度绩效管理规范
- 拔罐放血排毒技术规范流程
- 茶树病虫害绿色防控技术指引
- 电力行业智能巡检体系建设实施方案
- 保密管理方案和措施
- 青浦区2024-2025学年六年级下学期期末考试数学试卷及答案(上海新教材沪教版)
- 华辰芯光半导体有限公司光通讯和激光雷达激光芯片FAB量产线建设项目环评资料环境影响
- 医学翻眼睑操作规范教学
- 《纳米碳酸钙在橡胶中的应用机理》课件
- 车间材料损耗管理制度
- 宿舍改造可行性研究报告
- 实验动物咽拭子采集流程规范
- 2024年-2025年国网学堂考试题库及答案
- RL-、RC串联电路课件
评论
0/150
提交评论