中南大学 计算机体系结构实验报告
中南大学计算机实践报告

中南大学计算机实践报告中南大学计算机实践报告中南大学计算机实践报告一.任务内容要想制作好一个网页,首先要在整体上规划好自己网站的主题和内容,确定自己需要传达给访问用户的主要信息,然后仔细斟酌,把自己所有要表达的意念合情合理地组织起来;其次,是设计一个富有个性的页面式样,务求尽善尽美。
这样制作出来的主页才会清晰、明了、内容充实。
我从6岁就开始学习古筝,从小对古筝有一种特殊的情感,并且对古筝的各方面的情况有较深的理解,因此我把这次计算机实践课程的主题定为了“唯美古筝”。
主题实践报告以古筝为线索展开介绍,内容包括古筝的结构、古筝的历史、中国著名古筝曲、当代中国著名的古筝家及中外联系之桥等五大项内容:1)在“古筝的结构”一大内容中,介绍了古筝从拔弦古古筝、击弦古古筝到手拨式键盘乐器到现在乐器大家族之中的“公主”的演变过程,并简述了古筝诞生、发展的重大意义。
2)在“古筝的历史”这部分内容中,着重写了筝的来由,命名以及各种关于古筝的典故,并让大家对古筝发展有所认识。
3)在“中国古筝名曲”中,展示出了中国古筝界风斐之作和中国的一些经典民族乐曲。
例如《高山流水》、《广陵散》和贺渌訂名曲《梅花三弄》等。
4)“中国当代著名古筝家”内容中则介绍了包括中国著名青年古筝家袁莎和任洁的几个古筝名家风采。
让古筝家的魅力感染古筝爱好者学习古筝,关注古筝界的热情。
5)在“中外联系之桥”这一内容中,我介绍了敦煌莫高窟里美丽的壁画,这些事古筝存于古今的证明。
这五大内容的介绍,旨在对唯美古筝做一个全面的解释和分析。
二.设计步骤首先确定了“唯美古筝”的主题后,我策划将网页的风格定为轻快明丽、简洁清新.主题分为确定的五大内容(即古筝的结构,古筝的历史,中国当代古筝家简介及中国古筝名曲,中外联系之桥展示等方面)来分别介绍,这份设计实践项目在首页之下分五大分块。
按照计算机实践的任务要求,也为了使网页制作及设计精美,我在项目中运用了5个网页,制作了15张幻灯片(十五张幻灯片为一个统一整体介绍五大内容之一),从网上搜集丰富的资料添入网页和幻灯片中,并且在首页中加入了两个简易动画以增添艺术效果,首页与其它网页之间,首页与幻灯片之间用超链接联系起来,使得整个项目结构紧凑,衔接紧密。
中南大学软件体系结构实验报二

实验2 UML实验(2)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1. 学习类图的绘制;2. 学习从系统需求中识别类,并构建相应的面向对象模型;3. 学习使用顺序图描述对象之间的交互;4. 学习使用活动图为业务流程建模;5. 学习使用PowerDesigner实现正向工程和逆向工程。
二、实验内容1. 根据以下描述绘制类图,再正向工程生成Java源代码(也可生成其他面向对象语言的源代码,如C++或C#等):图形(Shape)可分为圆形(Circle)、矩形(Rectangle)、椭圆形(Ellipse)等具体图形,在Shape 类中提供了一个抽象的draw()方法用于绘制图形,而在具体的图形类中实现该抽象draw()方法。
提供一个图形工厂类(ShapeFactory),该类提供一个静态方法createShape(char type),其返回类型为Shape,参数type为所需绘制图形对应的代码,例如“c”表示圆形,“r”表示矩形,“e”表示椭圆形等,在createShape()方法中,可以使用条件语句来判断所需绘制图形的类型,并根据参数的不同返回不同的具体形状对象。
【注:“创建关系”是一种特殊的“依赖关系”】2. 根据以下描述绘制类图:某商场会员管理系统包含一个会员类(Member),会员的基本信息包括会员编号、会员姓名、联系电话、电子邮箱、地址等,会员可分为金卡会员(GoldMember)和银卡会员(SilverMember)两种,不同类型的会员在购物时可以享受不同的折扣;每个会员可以拥有一个或多个订单(Order),每一个订单又可以包含至少一条商品销售信息(ProductItem),商品销售信息包括订单编号、商品编号、商品数量、商品单价和折扣等;每一条商品销售信息对应一类商品(Product),商品信息包括商品编号、商品名称、商品单价、商品库存量、商品产地等。
计算机体系结构实验报告

计算机体系结构实验报告实验目的:1.掌握计算机体系结构的基本概念和组成部分2.学会使用模拟器对计算机性能进行测试和优化3.理解计算机指令的执行过程和流水线工作原理4.掌握计算机性能指标的测量方法和分析技巧实验材料和工具:1.一台个人电脑2.计算机体系结构模拟器3.实验指导书和实验报告模板实验步骤:1.搭建计算机系统:根据实验指导书提供的指导,我们搭建了一个简单的计算机系统,包括中央处理器(CPU)、内存和输入输出设备。
2.编写测试程序:我们编写了一段简单的测试程序,用于测试计算机系统的性能。
3.运行测试程序:我们使用模拟器运行测试程序,并记录测试结果。
模拟器可以模拟计算机的执行过程,并提供各种性能指标的测量功能。
4.分析和优化:根据测试结果,我们对计算机系统的性能进行分析,并尝试优化系统设计和测试程序,以提高性能。
实验结果:通过测试程序的运行和性能指标的测量,我们得到了如下结果:1.计算机的时钟频率:根据模拟器显示的结果,我们得知计算机的时钟频率为1000MHz。
2. 指令执行时间:我们计算了测试程序的平均执行时间,得到了结果为5ms。
4.流水线效率:我们通过模拟器提供的流水线分析功能,得到了计算机流水线的平均效率为80%。
实验分析:根据测试结果1.提高时钟频率:通过增加时钟频率可以加快计算机的运行速度。
我们可以尝试调整计算机硬件的设计和制造工艺,提高时钟频率。
2.优化指令执行过程:我们可以通过优化指令的执行过程,减少执行时间。
例如,并行执行多个指令、增加指令缓存等。
3.提高流水线效率:流水线是提高计算机性能的关键技术,我们可以通过增加流水线级数和优化流水线结构,提高流水线效率。
4.增加并行计算能力:并行计算是提高计算机性能的重要途径,我们可以尝试增加计算机的并行计算能力,例如增加处理器核心的数量。
实验总结:通过本次实验,我们深入了解了计算机体系结构的工作原理和性能指标。
通过模拟器的使用,我们学会了对计算机性能进行测试和进行性能优化的方法。
计算机系统结构实验报告

计算机系统结构实验报告实验目的:掌握计算机系统的基本结构和工作原理,了解计算机系统的组成部分及其相互关系。
实验仪器和材料:计算机硬件设备(主机、硬盘、内存、显卡等)、操作系统、实验指导书、实验报告模板。
实验原理:实验步骤:1.搭建计算机硬件设备,将主机、硬盘、内存、显卡等组装连接好。
2. 安装操作系统,如Windows、Linux等。
3.启动计算机,进入操作系统界面。
4.打开任务管理器,查看CPU的使用情况。
5.打开任务管理器,查看内存的使用情况。
6.运行一些应用程序,观察CPU和内存的使用情况。
7.尝试使用输入输出设备,如键盘、鼠标等。
实验结果:通过实验,我们可以观察到计算机系统的硬件部分和软件部分的工作情况。
通过任务管理器,我们可以查看到CPU的使用情况和内存的使用情况。
在运行应用程序时,我们可以观察到CPU和内存的使用情况的变化。
通过使用输入输出设备,我们可以与计算机进行交互操作。
实验分析:从实验结果可以看出,计算机系统的硬件部分和软件部分都是相互关联的。
CPU作为计算机的核心部件,负责执行各种指令,通过数据传输和计算来完成各种操作。
而内存则用于存储数据和程序,通过读写操作来完成对数据的处理。
硬盘则用于长期存储数据。
操作系统则是计算机系统的管理者,通过调度CPU和内存的使用来实现对计算机资源的分配。
结论:计算机系统是由硬件和软件部分组成的,其中硬件部分包括CPU、内存、硬盘等,软件部分包括操作系统、应用程序等。
计算机系统通过CPU 的运算和数据传输来实现各种操作。
通过实验,我们可以观察到计算机系统的工作情况,并深入了解计算机系统的组成和工作原理。
实验总结:通过本次实验,我们对计算机系统的基本结构和工作原理有了更深入的了解。
实验中,我们搭建了计算机硬件设备,安装了操作系统,并通过观察和分析实验结果,进一步认识到计算机系统的组成部分和各部分之间的相互关系。
通过操作输入输出设备,我们还实践了与计算机进行交互操作的过程。
中南大学数据结构实验报告1(线性表)

中南⼤学数据结构实验报告1(线性表)实验⼀线性表的操作算法⼀、实验⽬的:1了解线性表的逻辑结构和存储结构,以及定义在逻辑结构上的各种基本运算2分别以数组和链表为存储结构,实现线性表的插⼊,删除,查找,排序,合并等操作⼆、实验内容:⽤C/C++语⾔编写程序,分别以数组和链表为存储结构,完成以下功能:1输⼊数据,创建⼀个线性表2可在线性表的任意位置插⼊新结点3可删除线性表的任意⼀个结点4可在线性表中查找结点5将线性表从⼩⾄⼤排序6将两个线性表合并三、详细设计:顺序表#includeusing namespace std;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType;#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct { //结构体ElemType *elem;int length;int listsize;}SqList;SqList Lx;Status InitList_Sq(SqList &L) //分配空间{ L.elem=new ElemType[LIST_INIT_SIZE];if(!L.elem)exit(OVERFLOW);L.length =0;L.listsize=LIST_INIT_SIZE;return OK;}Status ListInsert(SqList &L,int i,ElemType e) //插⼊新元素{ int *q,*p;ElemType *newbase; if(i<1 || i>L.length+1) return ERROR;if(L.length>=L.listsize){ newbase=new ElemType[L.listsize+LISTINCREMENT];if(!newbase) exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}q=&(L.elem[i-1]);for (p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L.length;return OK;}Status Listlength(SqList L) //长度{ int *p=L.elem; //判断线形表是否存在while(p){ return (L.length); }}Status GetElem(SqList L, int i,ElemType &e) //取元素{ if(i<1 || i>L.length)return ERROR;else{ e=L.elem[i-1];return e;}}void MergeList(SqList La,SqList Lb,SqList &Lc) //合并{ ElemType ai,bj;InitList_Sq(Lc);int i=1,j=1,k=0;int La_len,Lb_len;La_len=Listlength(La);Lb_len=Listlength(Lb);while((i<=La_len)&&(j<=Lb_len)){ GetElem(La,i,ai);GetElem(Lb,j,bj);if(ai<=bj){ ListInsert(Lc,++k,ai);++i; }else{ ListInsert(Lc,++k,bj);++j; }}while(i<=La_len){ GetElem(La,i++,ai);ListInsert(Lc,++k,ai);}while(j<=Lb_len){ GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);}}void show(SqList L,int i) //显⽰{ int j;ElemType k;cout<<"顺序表显⽰如下:"<for(j=0;j{ k=L.elem[j];cout<"; }if(j==i-1 && i>0){ k=L.elem[j]; cout<cout<}void create(SqList &L,int n) //输⼊元素{ int e; for(int i=0;i{ cin>>e;L.elem[i]=e;L.length=i+1; }}Status ListDelete_Sq(SqList &L,int i,ElemType &e) //删除{ ElemType *p, *q; if(i<1 || i>L.length) return ERROR;p=&(L.elem[i-1]);e=*p;q=L.elem+L.length-1;for(++p;p<=q;++p) *(p-1)=*p;--L.length;return OK;}Status Listxiugei(SqList &L,int i,ElemType &e) //修改{ if(i<1 || i>L.length) return ERROR;else{ L.elem[i-1]=e;return OK; }}void shuru(SqList &L1) //顺序表的创建{ int a;InitList_Sq(L1);cout<<"请输⼊顺序表的长度:";cin>>a;cout<<"请输⼊顺序表的元素(共"<create(L1,a);show(L1,a);}void shanchu(SqList &L1) //删除顺序表⾥的元素{ int a;int j; ElemType e1;a=L1.length;cout<<"请选择所要删除元素的位置:";cin>>j;while(j<0||j>Listlength(L1)){ cout<<"输⼊有误,请重新输⼊"<cout<<"请选择所要删除元素的位置:";cin>>j; }ListDelete_Sq(L1,j,e1);cout<<"修改后的顺序表数据:"<show(L1,a-1);}void charu(SqList &L1) //插⼊元素到顺序表⾥{ int a; int j; ElemType e1; a=L1.length;cout<<"请选择所要插⼊元素的位置:";cin>>j;while(j<0||j>Listlength(L1)){ cout<<"输⼊有误,请重新输⼊"<cout<<"请选择所要插⼊元素的位置:";cin>>j; }cout<<"要插⼊的元素:";cin>>e1;ListInsert(L1,j,e1);cout<<"修改后的顺序表数据:"<show(L1,a+1);}void hebing(SqList &L3) //合并两个顺序表{ SqList L1,L2;int a,b;InitList_Sq(L1); InitList_Sq(L2);cout<<"请输⼊第⼀个有序表的长度:"; cin>>a;cout<<"请输⼊第⼀个有序表的元素(共"<create(L1,a);show(L1,a);cout<<"请输⼊第⼆个有序表的长度:"; cin>>b;cout<<"请输⼊第⼆个有序表的元素(共"<create(L2,b);show(L2,b);MergeList(L1,L2,L3);cout<<"合并后的有序表如下:"; show(L3,a+b);}void main() //主菜单{ int choice;for(;;){ cout<<"顺序表的基本操作"<cout<<"1.顺序表的创建"<cout<<"2.顺序表的显⽰"<cout<<"3.顺序表的长度"<cout<<"4.插⼊元素到顺序表⾥"<cout<<"5.删除顺序表⾥的元素"<cout<<"6.合并两个顺序表"<cout<<"7.退出系统"<cout<<"请选择:";cin>>choice;switch(choice){ case 1: shuru(Lx);break;case 2: show(Lx,Lx.length);break;case 3: cout<<"顺序表的长度:"<case 4: charu(Lx);break;case 5: shanchu(Lx);break;case 6: hebing(Lx);break;case 7: cout<<"退出系统!"<default : cout<<"输⼊有误,请重新选择"< }}链表#includeusing namespace std;#define true 1#define false 0#define ok 1#define error 0#define overflow -2typedef int Status;typedef int ElemType;typedef struct LNode //存储结构{ ElemType data;struct LNode *next;}LNode,*LinkList;void CreateList(LinkList &L,int n) //尾插法创建单链表{ LinkList p;L=new LNode;L->next=NULL; //建⽴⼀个带头结点的单链表LinkList q=L; //使q指向表尾for(int i=1;i<=n;i++){ p=new LNode;cin>>p->data;p->next=NULL;q->next=p;q=p; }}Status GetElem(LinkList L,int i,ElemType &e)//取第i个元素{ LinkList p=L->next;int j=1;while(p&&j{ p=p->next;++j; }if(!p||j>i) return error; //第i个元素不存在e=p->data;return ok;}Status LinkInsert(LinkList &L,int i,ElemType e) //插⼊{ LinkList p=L;int j=0;while(p&&j{ p=p->next;++j; } //寻找第i-1个结点 if(!p||j>i-1)return error; //i⼩于1或者⼤于表长加1 LinkList s=new LNode; //⽣成新结点s->data=e;s->next=p->next; //插⼊L中p->next=s;return ok;}Status ListDelete(LinkList &L,int i,ElemType &e) // 删除{ LinkList p=L;LinkList q;int j=0;while(p->next&&j{ //寻找第i个结点,并令p指向其前驱 p=p->next;++j; }if(!(p->next)||j>i-1) return error; //删除位置不合理q=p->next;p->next=q->next; //删除并释放结点e=q->data;delete(q);return ok;}void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) { //合并两个顺序链表LinkList pa,pc,pb; pa=La->next;pb=Lb->next;Lc=pc=La;while(pa&&pb){ if(pa->data<=pb->data){ pc->next=pa;pc=pa;pa=pa->next; }else{ pc->next=pb;pc=pb;pb=pb->next; }}pc->next=pa?pa:pb;delete(Lb);}void show(LinkList L) //显⽰{ LinkList p;p=L->next;while(p){ cout<data<<"-->";p=p->next; }cout<}int Length(LinkList L,int i) //表长{ i=0;LinkList p=L->next;while(p){ ++i;p=p->next; }return i;}void xiugai(LinkList L) //修改{ int i,j=1;ElemType k;ElemType e,m;LinkList p=L->next;cout<<"请输⼊要修改的元素位置(0 cin>>i;GetElem(L,i,e);cout<<"该位置的元素:"<cout<<"修改后的元素值:";cin>>k;while(p&&j{ p=p->next;++j; }m=p->data;p->data=k;cout<<"修改后的单链表显⽰如下:"< show(L);}void hebing() //合并两个单链表{ int a,b;LinkList La,Lb,Lc;cout<<"请输⼊第⼀个有序链表的长度:"<cin>>a;cout<<"请输⼊第⼀个有序链表的元素共("< CreateList(La,a);show(La);cout<<"请输⼊第⼆个有序链表的长度:"< cin>>b;cout<<"请输⼊第⼆个有序链表的元素共("< CreateList(Lb,b);show (Lb);MergeList(La,Lb,Lc);cout<<"合并后的有序链表如下:"<show(Lc);}void main() //主函数{ int select;int x;ElemType y;LinkList list;for(;;){ cout<<"单链表的基本操作"<cout<<"1.单链表的创建"<cout<<"2.单链表的显⽰"<cout<<"3.单链表的长度"<cout<<"4.插⼊元素到单链表⾥"<cout<<"5.删除单链表⾥的元素"<cout<<"6.合并两个单链表"<cout<<"7.退出系统"<cout<<"请选择:";cin>>select;switch(select){ case 1:cout<<"请输⼊单链表的长度:"< cin>>x;cout<<"请输⼊"<CreateList(list,x);break;case 2: cout<<"单链表显⽰如下:"<show(list);break;case 3: int s;cout<<"单链表的长度为:"<break;case 4: cout<<"请选择要插⼊的位置:"; cin>>x; while(x<0||x>Length(list,s)){ cout<<"输⼊有误,请重新输⼊"<cout<<"请选择所要插⼊元素的位置:"; cin>>x; }cout<<"要插⼊的元素值:";cin>>y;LinkInsert( list,x,y);cout<<"插⼊后单链表显⽰如下:"<show(list);break;case 5: cout<<"请选择要删除的位置:"; cin>>x; while(x<0||x>Length(list,s)){ cout<<"输⼊有误,请重新输⼊"<cout<<"请选择所要删除元素的位置:"; cin>>x; }ListDelete(list,x,y);cout<<"要删除的元素值:"<cout<<"删除后的单链表显⽰如下:"<show(list);break;case 6: hebing();break;case 7: exit(0);break;default : cout<<"输⼊有误,请重新输⼊"< break;}}}四、实验结果:顺序表链表。
(完整word)中南大学软件体系结构实验报告

CENTRAL SOUTH UNIVERSITY软件体系结构实验报告学生姓名周建权班级学号 0909121915指导教师穆帅设计时间2014年11月实验一系统的用例模型一、实验目的1.熟悉用例图的基本功能和使用方法。
2.锻炼结合给定题目,进行有效需求分析的能力。
3.掌握如何使用建模工具绘制用例图的方法。
二、实验器材1.计算机一台。
2.UML建模工具,比如软件Rational Rose 或StarUML。
三、实验内容在理解用例图的基本功能和使用方法的基础上,结合具体问题,完成对系统的需求建模,得到用例模型后,应针对每个用例进行业务分析,说明其具体的业务流程。
用Rational Rose或StarUML工具软件绘制系统的用例图.下文以Rational Rose为例讲解基本步骤。
四、实验步骤1.结合实际给定题目,完成系统的需求建模。
2.针对每个用例进行业务分析。
以图书管理系统中“删除读者信息"用例为例来说明实验具体步骤。
(1)分析:在图书管理系统中,管理员首先登录系统,系统验证通过后,管理方可向系统查询数据,在查询后,系统会给出提示,有没有找到相关的数据,管理员根据系统查询的返回结果,进行下一步的操作,就是删除读者,在删除的过程中,系统会对查询得到的结果判断该记录是否可以删除,若可以删除,则给删除提示,若不能删除,也给相关的提示信息。
(2)根据分析结果,书写业务流程,一般包含以下信息:①管理员在录入界面,输入待删除的读者名;②“业务逻辑”组件在数据库中,查找待删除的读者名;③如果不存在,则显示出错信息,返回步骤①,如果存在则继续;④“业务逻辑”组件判断“待删除的读者”是否可以删除;⑤如果不可以,则显示出错信息,返回步骤⑧,如果可以则继续;⑥在数据库中,删除相关信息;⑦显示删除成功信息;⑧结束。
3.根据分析结果,绘制用例图.以图书管理系统中“删除读者信息"用例为例说明具体绘图步骤:(1)在用例图上双击main,出现如图1。
中南大学计算机实践报告.doc

中南大学计算机实践报告中南大学计算机实践报告中南大学本科生课程设计(实践)任务书、设计报告(计算机程序设计基础FORTRAN)题目线性方程组求解问题学生姓名指导教师学院专业班级学生学号刘卫国土木工程学院土建类班计算机基础教学实验中心202*年6月29日一、实践目的通过本课程设计,培养程序设计能力以及综合解决实际问题的能力。
通过自己分析问题、寻求算法、编写、调试程序的过程,掌握FORTRAN程序设计与调试方法,提高灵活运用所学知识解决问题的能力。
二、设计任务线性病态方程组问题:1/21/31/4x10.951/31/41/5x0.6721/41/51/6x30.52(1)求方程的解。
(2)将方程右边向量元素b3改为0.53,再求解,并比较b3的变化和解的相对变化。
(3)计算系数矩阵A的条件数并分析结论。
提示:矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积,即cond(A)AA1。
这样定义的条件数总是大于1的。
条件数越接近于1,矩cond(A)AA1阵的性能越好,反之,矩阵的性能越差。
矩阵A的条件数Amax{aij}1jni1m,其中,aij系矩阵A的元素。
要求:(1)方程的系数矩阵、常数向量均从文件中读入。
(2)定义求解线性方程组Ax=b的子程序,要求该子程序能求解任意线性方程组。
(3)在主程序中调用子程序,并对求解结果进行对比分析。
(4)绘制常数向量修改前后所求得的方程解的数据分布图。
三系统坏境系统开发环境为CONSOLEAPPLICAT三.系统功能及系统详细设计四系统功能及系统详细设计。
系统功能分析针对题目要求,我设计的系统主要为了解决题目中所提出并要求的问题。
子程序则各尽其用,不仅可以作为整体系统的重要部分,还可以使用于通用问题。
如三角分解法,可以解决线性方程组的求解问题。
求范数和矩阵求逆的子程序,可以解决相应的问题。
再如绘图程序,将问题(2)的结果直观化,更直观明显的表现了病态方程的特点与定义。
计算机体系结构实验报告——实验一

计算机体系结构实验报告——实验一1.实验目的:通过本实验,熟悉WinDLX模拟器的操作和使用,了解DLX指令集结构及其特点。
2.实验内容:(1)用WinDLX模拟器执行求阶乘程序facts。
执行步骤详见“WinDLX教程”。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
(2)输入数据“3”采用单步执行方法,完成程序并通过上述使用WinDLX,总结WinDLX 的特点。
(3)注意观察变量说明语句所建立的数据区,理解WinDLX指令系统。
3.实验程序:求阶乘程序fact.s--------------------------------------------------------------------------;Program begin at symbol main;requires module INPUT;read a number from stdin and calculate the factorial(type:double);the result is written to stdout;--------------------------------------------------------------------------.dataPrompt:.asciiz"An integer value>1:"在变量Prompt中存放一个字符串PrintfFormat:.asciiz"Factorial=%g\n\n"在变量pringformat中存放一个字符串.align2PrintfPar:.word PrintfFormat printfFormat的地址值PrintfValue:.space8给PrintValue保留8个字节.text正文.global main标号mainmain:程序在main开始;***Read value from stdin into R1说明:从标准输入程序读值到R1addi r1,r0,Prompt0+Prompt地址值送R1jal InputUnsigned转输入程序InputUnsigned;***init values输入的值在R1中movi2fp f10,r1;R1->D0D0..Count register R1送F10(整形变量变为浮点变量) cvti2d f0,f10F10送F0,F1(单精度变为双精度)addi r2,r0,1;1->D2D2..result0+1送R2movi2fp f11,r2R2送F11(整形变量变为浮点变量)cvti2d f2,f11F11送F2,F3(单精度变为双精度)movd f4,f2;1->D4D4..Constant1F2,F3送F4,F5;***Break loop if D0=1说明Loop:led f0,f4;D0<=1?标号:LOOP IF(F0<=F4)FPS=1ELSE FPS=0bfpt Finish IF FPS=1转Finish;***Multiplication and next loop下一个程序段说明multd f2,f2,f0f2*f0送f2subd f0,f0,f4F0-F4送f0j Loop转loopFinish:;***write result to stdout结束标号写结果到标准输出程序sd PrintfValue,f2结果值由f2送变量PrintfValueaddi r14,r0,PrintfPar PrintfPar地址值送R14trap5自陷调用5将结果值输出;***endtrap0自陷调用0程序结束该程序中调用了input.s中的输入子程序;-----------------------------------------------------------------------------;Subprogram call by symbol"InputUnsigned";expect the address of a zero-terminated prompt string in R1;returns the read value in R1;changes the contents of registers R1,R13,R14;-----------------------------------------------------------------------------.data;***Data for Read-TrapReadBuffer:.space80输入缓冲区80个字节ReadPar:.word0,ReadBuffer,80变量ReadPar一个字“0”;***Data for Printf-TrapPrintfPar:.space4变量PrintfPar保留4个字节SaveR2:.space4变量SaveR2保留4个字节SaveR3:.space4SaveR4:.space4SaveR5:.space4.text.global InputUnsigned标号InputUnisignedInputUnsigned:;***save register contentssw SaveR2,r2R2送M(SaveR2)sw SaveR3,r3sw SaveR4,r4sw SaveR5,r5;***Promptsw PrintfPar,r1R1送PrintfParaddi r14,r0,PrintfPar PrintfPar+0送R14trap5自陷调用5;***call Trap-3to read lineaddi r14,r0,ReadPar ReadPar+0送R14trap3自陷调用3;***determine valueaddi r2,r0,ReadBuffer ReadBuffer+0送R2addi r1,r0,00送R1addi r4,r0,10;Decimal system10送R4Loop:;***reads digits to end of line标号LOOPlbu r3,0(r2)M(R2)+0送R3(R2内容为ReadBuffer的地址) seqi r5,r3,10;LF->Exit IF(R3=立即数10)1送R5ELSE0送R5 bnez r5,Finish IF(R5不等于0)转Finishsubi r3,r3,48;??R3-48送R3(48为十六进制30,ASCII码变换) multu r1,r1,r4;Shift decimal R4*R1送R1add r1,r1,r3R3+R1送R1addi r2,r2,1;increment pointer R2+1送R2j Loop转LOOPFinish:;***restore old register contents标号Finishlw r2,SaveR2M(SaveR2)送R2lw r3,SaveR3lw r4,SaveR4lw r5,SaveR5jr r31;Retur R31送PC从子程序返回4、程序流程图5、实验步骤及结果双击Code图标,从左到右依次为代表存储器内容的三栏信息:地址(符号或数字)、命令的十六进制机器代码和汇编命令。
计算机体系结构实验报告

计算机体系结构实验报告实验⼆结构相关⼀、实验⽬的:通过本实验,加深对结构相关的理解,了解结构相关对CPU性能的影响。
⼆、实验内容:1. ⽤WinDLX模拟器运⾏程序structure_d.s 。
2. 通过模拟,找出存在结构相关的指令对以及导致结构相关的部件。
3. 记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执⾏周期数的百分⽐。
4. 论述结构相关对CPU性能的影响,讨论解决结构相关的⽅法。
三、实验程序structure_d.sLHI R2, (A>>16)&0xFFFF 数据相关ADDUI R2, R2, A&0xFFFFLHI R3, (B>>16)&0xFFFFADDUI R3, R3, B&0xFFFFADDU R4, R0, R3loop:LD F0, 0(R2)LD F4, 0(R3)ADDD F0, F0, F4 ;浮点运算,两个周期,结构相关ADDD F2, F0, F2 ; <- A stall is found (an example of how to answeryour questions)ADDI R2, R2, #8ADDI R3, R3, #8SUB R5, R4, R2BNEZ R5, loop ;条件跳转TRAP #0 ;; Exit <- this is a comment !!A: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10B: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10四、实验过程打开软件,load structure_d.s⽂件,进⾏单步运⾏。
经过分析,此程序⼀次循环中共有五次结构相关。
(R-stall 数据相关Stall- 结构相关)1)第⼀个结构相关:addd f2,,f0,f2由于前⾯的数据相关,导致上⼀条指令addd f0,f0,f4暂停在ID阶段,所以下⼀条指令addd f2,,f0,f2发⽣结构相关,导致相关的部件:译码部件。
体系结构实验报告

中南大学软件学院软件体系结构设计模式实验报告学生姓名:宋昂所在学院:软件学院学生学号: 3901080115 学生班级:软件0801 指导老师:刘伟完成日期: 2010-12-7一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。
二、实验内容使用PowerDesigner和任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。
(1) 简单工厂模式使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、方形(Rectangle)和三角形(Triangle) 对象,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnsupportedShapeException,绘制类图并编程实现。
(2) 简单工厂模式使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man 对象,如果传入参数“W”,则返回一个Woman对象,使用任意一种面向对象编程语言实现该场景。
现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
(3) 工厂方法模式某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统。
用代码实现日志记录器实例,如果在系统中增加一个中的日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码,注意增加新日志记录方式过程中原有代码的变化。
中南大学数据结构实验报告(七)

实验七1.需求分析本实验目的是使读者,掌握常用排序方法的基本思想,通过实验加深理解各种排序算法,通过实验掌握各种排序方法的时间复杂度分析,了解各种排序方法的优缺点及适用范围。
1.排序算法的实现(设计性实验)问题描述排序是计算机领域的一项重要技术,是程序设计中的一种重要运算。
它的功能是将一个数据元素的任意序列重新排列成一个按键有序的序列。
学习和研究各种排序方法是计算机工作者的一项重要工作课题。
基本要求随机产生n个整数(依次为n赋值100、200、300、1 000和2 000),将其存于数组A[1..n]中。
对主要算法(顺序查找、插入排序、归并排序、堆排序和快速排序)进行实验比较,计算出平均比较次数c n、平均移动次数m n及执行时间t n。
c n和m n由程序自动计算,t n由系统时间计算。
对实验结果数据进行对比分析。
测试数据由随机数生成器决定。
实现提示(1) 设计一个驱动程序,其任务是,随机输入一组原始数据A[1..n],对于查找还需准备一个键码值(可以随机产生,也可在A[1..n]中按索引号挑选若干有代表性的数据)。
对每组原始数据,分别调用查找或排序算法过程。
(2) 为了自动计算c n和m n需要在每个算法过程中的适当位置插入计数操作。
手工计算每个算法的执行时间t n时,为了减少计时误差,删除所插入的计数操作,并按n的大小确定一个K,对每个查找或排序算法过程反复调用K次,在调用开始前设置一个计时起点t0,在K次调用执行后可打印信息。
设计时的终点为t1,则(t1t0)/K便是算法的大致执行时间。
选作内容对不同的输入表长做试验,观察含义相同的变量相对于表长的变化关系,还可以对稳定性做验证。
2.统计成绩(综合性实验)问题描述给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名及各科成绩组成。
对学生的考试成绩进行有关统计,并打印统计表。
基本要求(1) 按总数高低次序,打印出名次表,分数相同的为同一名次。
计算机系统结构 实验报告

计算机系统结构实验报告计算机系统结构实验报告一、引言计算机系统结构是计算机科学中的重要领域,它研究计算机硬件和软件之间的关系,以及如何设计和优化计算机系统的组成部分。
本实验旨在通过实际操作和观察,深入了解计算机系统结构的原理和实践应用。
二、实验目的本次实验的主要目的是通过搭建一个简单的计算机系统,实践理论知识,加深对计算机系统结构的理解。
具体目标包括:1. 学习和掌握计算机系统的基本组成部分,如中央处理器(CPU)、内存、输入输出设备等。
2. 理解计算机指令的执行过程,包括指令的获取、解码和执行。
3. 掌握计算机系统的性能评估方法,如时钟周期、吞吐量和响应时间等。
三、实验过程1. 搭建计算机系统首先,我们需要准备计算机系统的各个组成部分。
将中央处理器、内存、输入输出设备等逐一连接起来,确保它们能够正常工作。
然后,将操作系统安装到计算机系统中,以便后续的实验操作。
2. 执行指令在搭建好计算机系统后,我们可以开始执行指令了。
通过输入指令,计算机系统将按照指令的要求进行相应的操作。
我们可以观察指令的执行过程,包括指令的获取、解码和执行。
同时,我们还可以通过性能评估方法,如时钟周期、吞吐量和响应时间等,评估计算机系统的性能。
3. 优化计算机系统在观察和评估计算机系统的性能后,我们可以根据实验结果进行优化。
例如,我们可以调整计算机系统的硬件配置,提升计算机的运行速度和效率。
另外,我们还可以优化指令的执行顺序和算法,以提高计算机系统的整体性能。
四、实验结果与分析通过实验,我们可以得到计算机系统的性能数据,并进行相应的分析。
例如,我们可以计算计算机系统的时钟周期,以及每秒钟能够执行的指令数量。
通过对这些数据的分析,我们可以了解计算机系统的性能瓶颈,并采取相应的优化措施。
五、实验总结本次实验通过搭建计算机系统、执行指令、优化系统等步骤,深入了解了计算机系统结构的原理和实践应用。
通过实验,我们学习到了计算机系统的基本组成部分,以及指令的执行过程。
中南大学软件体系结构实验报告实验1

Library users can reservebooks that arecurrently outon loan.If threereservations have already been made for a givenbook, andafurtherreservationismade,a new copywill beordered by the librarian.
The librarystoresvarious itemsthatcanbeborrowed, including booksandjournals.Bookscan be borrowedby both staffandstudents, butonlystaffmembers canborrowjournals.Whenauserborrows abook,theirloandetailsare checkedtoensurethat theyhave nooverdue books on loan,and havenot already borrowedthemaximumpermitted number of books.
9.学习使用组件图描述每个功能所在的组件位置以及它们之间的关系;
10.学习使用部署图描述软件中各个组件驻留的硬件位置以及这些硬件之间的交互关系。
二、实验内容
1.某酒店订房系统描述如下:
(1)顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;
(2)前台服务员可以利用系统直接在前台预订房间;
计算机体系结构实验报告3篇

计算机体系结构实验报告第一篇:计算机体系结构概述计算机体系结构是计算机学科中的一个重要分支,它研究的是计算机的硬件组成和工作原理,包括计算机的处理器、存储器、输入输出设备、总线等。
计算机体系结构的研究可以帮助我们理解计算机的工作原理,优化计算机的性能,提升计算机的能力。
计算机体系结构可以分为两个方面:指令集体系结构和微体系结构。
其中,指令集体系结构是指计算机的操作系统能够直接识别和执行的指令集合,它们是应用程序的编程接口;而微体系结构是指通过硬件实现指令集合中的指令,在底层支持指令集合的操作。
指令集体系结构和微体系结构是密切相关的,因为指令集体系结构会影响微体系结构的设计和实现。
目前,计算机体系结构主要有三种类型:单处理器体系结构、多处理器体系结构和分布式计算体系结构。
其中,单处理器体系结构是指所有的指令和数据都存放在同一台计算机中,这种体系结构的优点是操作简单、易于管理,但是主频存在瓶颈,无法很好地发掘多核的性能优势;多处理器体系结构是指多个计算机共享同一块物理内存,因此可以方便地实现负载均衡和任务协作,但是存在通信延迟和数据一致性问题;分布式计算体系结构则是指通过互联网将多个计算机连接成一个网络,可以在全球范围内共享计算资源,但是通信成本和数据安全问题需要考虑。
总之,计算机体系结构是计算机学科中的重要分支,它研究计算机的硬件组成和工作原理,帮助我们理解计算机的工作原理,优化计算机性能,提升计算机能力。
第二篇:计算机指令集体系结构计算机指令集体系结构,简称ISA(Instruction Set Architecture),是指计算机能够识别和执行的指令集合。
ISA是计算机指令的编程接口,定义了一组指令和地址模式,以及寄存器和内存的组织方式,它是计算机软件和硬件协同工作的关键接口之一。
ISA可以分为两类:精简指令集体系结构(RISC,Reduced Instruction Set Computer)和复杂指令集体系结构(CISC,Complex Instruction Set Computer)。
中南大学 计算机体系结构实验报告

计算机体系结构课程设计学院:信息科学与工程学院专业班级:指导老师:学号:姓名:.目录实验1 对指令操作码进行霍夫曼编码 (3)一、实验目的 (3)二、实验内容 (3)三、设计思路 (4)四、关键代码 (4)五、实验截图 (5)六、源代码 (5)实验2 使用LRU 方法更新Cache (8)一、实验目的 (8)二、实验内容 (8)三、设计思路 (9)四、程序截图 (9)五、实验代码 (9)实验总结 (16)参考文献 (16).实验1 对指令操作码进行霍夫曼编码一、实验目的了解和掌握指令编码的基本要求和基本原理二、实验内容1. 使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。
与扩展操作码和等长编码进行比较。
2. 问题描述以及问题分析举例说明此问题,例如:P1 P2 P3 P4 P5 P6 P70.45 0.30 0.15 0.05 0.03 0.01 0.01下表所示:对此组指令进行 HUFFMAN 编码正如下图所示:最后得到的HUFFMAN 编码如下表所示:最短编码长度为:H=0.45*1+0.30*2+0.15*3+0.05*4+0.03*5+0.01*6+0.01*6=-1.95.要对指令的操作码进行 HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造HUFFMAN 树再进行 HUFFAM 编码。
此过程的难点构造 HUFFMAN 树,进行 HUFFAM 编码只要对你所生成的 HUFFMAN 树进行中序遍历即可完成编码工作。
三、设计思路观察上图,不难看出构造 HUFFMAN 树所要做的工作:1、先对各指令操作码的出现概率进行排序,构造一个有序链表。
2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此两个节点。
3、在对链表进行排序,链表是否只有一个节点,是则 HUFFAN 树构造完毕,否则继续做 2 的操作。
计算机系统结构专业实习报告

计算机系统结构专业实习报告一、实习背景与目的随着信息技术的快速发展,计算机系统结构作为一门涵盖了计算机硬件和软件等多个方面的学科,在我国的高等教育体系中占据了重要的地位。
为了更好地将理论知识与实践相结合,提高自身综合素质和实际操作能力,我选择了计算机系统结构专业实习,以便为今后的学术研究和职业生涯打下坚实基础。
本次实习的主要目的是:1. 深入了解计算机系统结构的基本原理和组成部件;2. 熟悉各类计算机硬件设备的工作原理和性能指标;3. 掌握计算机系统组装、维护和调试的基本技能;4. 提高团队协作能力和沟通交流能力。
二、实习内容与过程1. 实习前的准备在实习开始前,我们参加了由指导老师举办的实习动员大会,了解了实习的要求、内容以及注意事项。
同时,我们还自学了相关教材和资料,为实习打下了理论知识基础。
2. 实习过程中的主要任务与收获实习过程中,我们主要完成了以下任务:1. 参观实验室和机房,了解各类计算机硬件设备及其功能;2. 学习计算机系统组装、维护和调试的基本技能;3. 参与实验室科研项目,协助导师进行数据分析和实验验证;4. 撰写实习日记和总结报告,记录实习过程中的所学所得。
具体收获如下:1. 熟悉了计算机系统结构的基本原理和组成部件,如CPU、内存、硬盘、显卡等;2. 掌握了计算机系统组装、维护和调试的基本技能,如安装操作系统、配置网络、排查故障等;3. 了解了实验室科研项目的工作流程,提高了科研素养;4. 增强了团队协作能力和沟通交流能力。
3. 实习中遇到的困难与解决方案在实习过程中,我们遇到了一些困难,如:1. 部分硬件设备的原理和操作较为复杂,一开始难以掌握;2. 实验室科研项目中的某些技术问题需要花费较长时间解决;3. 实习任务较重,时间紧张,难以兼顾学业与实习。
针对上述困难,我们采取了以下解决方案:1. 请教老师和同学,共同探讨,逐步掌握硬件设备的原理和操作;2. 利用课余时间深入学习相关技术,提高解决问题的能力;3. 合理安排时间,加强与团队成员的沟通,提高团队协作效率。
中南大学软件体系结构设计模式实验二

实验3 设计模式实验二实验学时: 4每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的行为型设计模式,包括职责链模式、命令模式、观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验内容1. 某企业的SCM(Supply Chain Management,供应链管理)系统中包含一个采购审批子系统。
该企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开董事会讨论决定。
如下图所示:采购人员主任副董事长董事长董事会金额<5万元5万元≤金额<10万元10万元≤金额<50万元金额≥50万元试使用职责链模式设计并模拟实现该系统。
2. 房间中的开关是命令模式的一个实例,现用命令模式来模拟开关的功能,可控制对象包括电灯和电风扇,绘制相应的类图并编程模拟实现。
3. 某软件公司欲开发一个基于Windows平台的公告板系统。
系统提供一个主菜单(Menu),在主菜单中包含了一些菜单项(MenuItem),可以通过Menu类的addMenuItem()方法增加菜单项。
菜单项的主要方法是click(),每一个菜单项包含一个抽象命令类,具体命令类包括OpenCommand(打开命令),CreateCommand(新建命令),EditCommand(编辑命令)等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen)的open()、create()、edit()等方法。
中南大学计算机网络实验报告

中南大学计算机网络——课程设计报告姓名:周建权学号:0909122820班级:信安1202目录第一章概要设计 (3)1.1设计目的、任务与要求 (3)1.2 开发环境简介 (3)第二章设计的基本概念和原理 (5)2.1 数据库 (5)2.2 MVC架构模式 (5)2.3 Web应用服务器 (6)第三章系统分析设计 (6)3.1 系统功能 (6)3.2 系统构架 (7)第四章系统实现 (9)4.1 数据库设计 (9)4.2 系统公共模块设计 (11)4.3 前台销售模块详细设计 (12)4.4 后台管理模块详细设计 (14)第五章完成情况 (15)5.1前台基本功能界面 (15)5.2后台基本功能界面 (20)第六章使用说明 (22)6.1网站访问方式 (22)第七章总结 (22)第八章参考文献 (22)第一章概要设计1.1设计目的、任务与要求电子商务(Electronic Commerce)是在Internet开放的网络环境下,基于浏览器/服务器应用方式,实现消费者的网上购物、商户之间的网上交易和在线电子支付的一种新型的商业运营模式。
Internet上的电子商务可以分为三个方面:信息服务、交易和支付。
主要内容包括:电子商情广告;电子选购和交易、电子交易凭证的交换;电子支付与结算以及售后的网上服务等。
主要交易类型有企业与个人的交易(B to C方式)和企业之间的交易(B to B方式)两种。
参与电子商务的实体有四类:顾客(个人消费者或企业集团)、商户(包括销售商、制造商、储运商)、银行(包括发卡行、收单行)及认证中心。
电子商务是Internet 爆炸式发展的直接产物,是网络技术应用的全新发展方向。
Internet本身所具有的开放性、全球性、低成本、高效率的特点,也成为电子商务的内在特征,并使得电子商务大大超越了作为一种新的贸易形式所具有的价值,它不仅会改变企业本身的生产、经营、管理活动,而且将影响到整个社会的经济运行与结构。
计算机体系结构实验报告

计算机体系结构实验报告实验⼀流⽔线中的相关⼀.实验⽬的1. 熟练掌握WinDLX模拟器的操作和使⽤,熟悉DLX指令集结构及其特点;2. 加深对计算机流⽔线基本概念的理解;3. 进⼀步了解DLX基本流⽔线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的⽅法,掌握如何使⽤定向技术来减少数据相关带来的暂停。
⼆.实验平台WinDLX模拟器三.预备知识1. WinDLXWinDLX模拟器是⼀个图形化、交互式的DLX流⽔线模拟器,能够演⽰DLX流⽔线是如何⼯作的。
该模拟器可以装载DLX汇编语⾔程序(后缀为“.s”的⽂件),然后单步、设断点或是连续执⾏该程序。
CPU的寄存器、流⽔线、I/O和存储器都可以⽤图形表⽰出来,以形象⽣动的⽅式描述DLX流⽔线的⼯作过程。
模拟器还提供了对流⽔线操作的统计功能,便于对流⽔线进⾏性能分析。
有关WinDLX的详细介绍,见WinDLX教程。
2. 熟悉WinDLX指令集和WinDLX源代码的编写3. 复习和掌握教材中相应的内容(1)DLX基本流⽔线(2)流⽔线的结构相关与数据相关结构相关:当指令在重叠执⾏过程中,硬件资源满⾜不了指令重叠执⾏的要求,发⽣资源冲突时,将产⽣“结构相关”。
数据相关:当⼀条指令需要⽤到前⾯指令的执⾏结果,⽽这些指令均在流⽔线中重叠执⾏时,就可能引起“数据相关”。
(3)定向技术的主要思想:在发⽣数据相关时,等待前⾯计算结果的指令并不⼀定真的马上就⽤到该计算结果,如果能够将该计算结果从其产⽣的地⽅直接送到其他指令需要它的地⽅,就可以避免暂停。
四.实验内容及结果1. ⽤ WinDLX 模拟器执⾏下列三个程序(任选⼀个):求阶乘程序 fact.s求最⼤公倍数程序 gcm.s求素数程序 prim.s分别以步进、连续、设置断点的⽅式运⾏程序,观察程序在流⽔线中的执⾏情况,观察CPU 中寄存器和存储器的内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机体系结构课程设计学院: 信息科学与工程学院专业班级:指导老师:学号:姓名:目录实验 1 对指令操作码进行霍夫曼编码 (3)一、实验目得 (3)二、实验内容 (3)三、设计思路 (4)四、关键代码 (4)五、实验截图 (5)六、源代码 (5)实验 2 使用 LRU 方法更新 Cache (8)一、实验目得 (8)二、实验内容 (8)三、设计思路 (9)四、程序截图 (9)五、实验代码 (9)实验总结 (16)参考文献 (16)实验 1 对指令操作码进行霍夫曼编码一、实验目得了解与掌握指令编码得基本要求与基本原理二、实验内容1、使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后得编码结果以及对指令码得长度进行评价。
与扩展操作码与等长编码进行比较。
2、问题描述以及问题分析举例说明此问题,例如:下表所示:对此组指令进行 HUFFMAN 编码正如下图所示:最后得到得 HUFFMAN 编码如下表所示:P1 P2 P3 P4 P5 P6 P70 10 110 1110 11110 111110 111111H=0、45*1+0、30*2+0、15*3+0、05*4+0、03*5+0、01*6+0、01*6=-1、95、要对指令得操作码进行 HUFFMAN 编码,只要根据指令得各类操作码得出现概率构造HUFFMAN 树再进行 HUFFAM 编码。
此过程得难点构造 HUFFMAN 树,进行 HUFFAM 编码只要对您所生成得 HUFFMAN 树进行中序遍历即可完成编码工作。
三、设计思路观察上图 ,不难瞧出构造 HUFFMAN 树所要做得工作:1、先对各指令操作码得出现概率进行排序,构造一个有序链表。
2、再取出两个最小得概率节点相加,生成一个生得节点加入到链表中,同时从两表中删除此两个节点。
3、在对链表进行排序,链表就是否只有一个节点,就是则 HUFFAN 树构造完毕,否则继续做 2 得操作。
为此设计一个工作链表(链表得元素时类,此类得功能相当结构。
)、HUFFMAN 树节点、HUFFMAN 编码表节点。
四、关键代码哈夫曼树重点在于如何排列权值大小不同得结点得顺序private int leafNum; //叶子结点个数private HaffmanNode[] hnodes; //哈夫曼树得结点数组public HaffManCode(double[] weight) //构造指定权值集合得哈夫曼树{int n = weight、length; //n个叶子结点this、leafNum = n;this、hnodes = new HaffmanNode[2*n-1]; //n个叶子结点得哈夫曼树共有2n-1个结点for(int i=0; i<n; i++) //结点数组初始化有n个叶子结点this、hnodes[i] = new HaffmanNode(weight[i]);for(int i=0; i<n-1; i++) //构造n-1个2度结点,每循环一次,构造一个2度结点{double min1, min2; int x1, x2;min1 = min2 = Integer、MAX_VALUE; //选择最小与次最小权值,初值为最大权值x1 = x2 = -1; //记录两个无父母得最小权值结点下标for(int j=0; j<n+i; j++) //查找两个无父母得最小权值结点{if(hnodes[j]、weight<min1 && hnodes[j]、parent==-1) {min2 = min1;x2 = x1;min1 = hnodes[j]、weight; //min1记下最小权值x1 = j; //x1记下最小权值结点得下标}else if(hnodes[j]、weight<min2 && hnodes[j]、parent==-1) {min2 = hnodes[j]、weight;x2 = j;//x2记下次最小权值结点得下标}}五、实验截图六、源代码public class huffman {private String str;public huffman(String str){this、str=str;}/*** 创建节点类* param args*/class Node{Node left;Node right;int data;char c;}/*** 节点数组(字符串类)* param args*/public void creatTree(){//先去掉重复得字符串,若不存在将字符加在strRepeat中String strRepeat="";for(int i=0;i<str、length();i++){char c=str、charAt(i);//判断就是否存在if(strRepeat、indexOf(c)==-1){ //找到字符位置并返回字符所在得位置strRepeat+=c;}}//统计字符出现得次数并建立节点Node[] nodes=new Node[strRepeat、length()]; //定义了一个nodes数组//存储节点得坐标值int s=0;for(int i=0;i<strRepeat、length();i++){char c=strRepeat、charAt(i);int count=getCount(str,c); //c在string中出现得次数Node node=new Node();node、data=count;node、c=c;nodes[s++]=node;}//创建哈弗曼树while(nodes、length>1){Node node=new Node();Node n1=nodes[0];Node n2=nodes[1];node、data=n1、data+n2、data;node、left=n1;node、right=n2;//改变节点数组长度Node[] nodes2=new Node[nodes、length-1];for(int i=2;i<nodes、length;i++){nodes2[i-2] = nodes[i];}nodes2[nodes2、length-1]=node;nodes=nodes2;}Node root=nodes[0];printCode(root,"");}/*** 统计字符出现得次数 get方法*/private int getCount(String str,char c){int count = 0;for(int i=0;i<str、length();i++){if(c==str、charAt(i))count++;}return count;}/*** 冒泡排序法* param nodes*/public void sort(Node[] nodes){for(int i=0;i<nodes、length;i++){for(int j=i+1;j<nodes、length;j++){if(nodes[i]、data>=nodes[j]、data){//交换节点对象Node temp=nodes[i];nodes[i]=nodes[j];nodes[j]=temp;}}}}/*** 打印编码* param args*/public void printCode(Node node,String code){if(node != null){if(node、left==null && node、right==null)System、out、println(node、c+"、、、"+node、data+"得编码就是: "+code);printCode(node、left,code+""+0);printCode(node、right,code+""+1);}}public static void main(String[] args) {String str="add bate";huffman hf=new huffman(str);hf、creatTree();}}实验 2 使用 LRU 方法更新 Cache一、实验目得了解与掌握寄存器分配与内存分配得有关技术。
二、实验内容LRU置换算法就是选择最近最久未使用得页面予以置换。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来经历得时间T,当须淘汰一个页面时,选择现有页面中T值最大得,即最近最久没有访问得页面。
这就是一个比较合理得置换算法。
举例说明此问题,例如: 有一个CACHE采用组相连映象方式。
每组有四块,为了实现LRU置换算法,在快表中为每块设置一个2位计数器。
我们假设访问序列为“1,1,2,4,3,5,2,1,6,7,1,3”。
在访问CACHE得过程中,块得装入,置换及命中时,具体情况如下表所示:三、设计思路LRU 置换算法就是选择最近最久未使用得页面予以置换。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来经历得时间 T,当须淘汰一个页面时,选择现有页面中 T 值最大得,即最近最久没有访问得页面。
这就是一个比较合理得置换算法。
四、程序截图五、实验代码import java、awt、*;import java、awt、event、*;import javax、swing、*;import javax、swing、table、*;public class lru extends Frame {public static void main(String[] args) {JFrame、setDefaultLookAndFeelDecorated(true);lru lruc = new lru();lruc、lauchFrame();}JLabel jlabel2;JTextField jtf2;JButton jb_input;JScrollPane jsp;JTable jt;DefaultTableModel dtm;static int list = 1, count = list - 1;int time1 = 0;int time2 = 0;int time3 = 0;int time4 = 0;public void lauchFrame() {this、setLayout(null);this、setBounds(100, 100, 540, 320);//this、setBackground(Color、cyan);this、setVisible(true);jlabel2 = new JLabel("请输入第" + list + "个访问页面:");jtf2 = new JTextField();jb_input = new JButton("输入");jlabel2、setBounds(20, 50, 140, 20);jtf2、setBounds(155, 50, 50, 20);jb_input、setBounds(240, 50, 60, 20);this、add(jlabel2);this、add(jtf2);this、add(jb_input);this、addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System、exit(0);}});jb_input、addActionListener(new InputActionListener());Object[] title = {"访问序列","Cache块0", "Cache块1", "Cache块2", "Cache块3", "状态"};dtm = new DefaultTableModel(title, 0);jt = new JTable(dtm);jsp = new JScrollPane(jt);jsp、setBounds(50, 80, 440, 197);jsp、setBackground(Color、black);this、add(jsp);}class InputActionListener implements ActionListener { //没有输入值,提示public void actionPerformed(ActionEvent e) {if(jtf2、getText()、equals("")) {Object[] options = { "OK" };JOptionPane、showOptionDialog(null, "输入错误,请按提示输入!", "警告", HZn6aJOptionPane、DEFAULT_OPTION, JOptionPane、WARNING_MESSAGE,8oJtInull, options, options[0]);}list++;if(count < 4) {//count记录装入cache块得页面数switch(count) {case 0://cache块中没有装入页面得情况dtm、addRow(new Object[]{jtf2、getText(), jtf2、getText(), "", "", "", "装入"});time2++;time3++;time4++;count++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");break;case 1://cache块中装入一个页面得情况if(jtf2、getText()、equals(jt、getValueAt(list-3, 1))) {//要访问得页面刚好在cache0中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), "", "", "", "命中"});time2++;time3++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else {//要访问得页面不在cache块中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jtf2、getText(), "", "", "装入"});time1++;time2 = 0;time3++;time4++;count++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");}break;case 2://cache块中装入两个页面得情况if(jtf2、getText()、equals(jt、getValueAt(list-3, 1))) {//要访问得页面刚好在cache0中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), "", "", "命中"});time1 =0;time2++;time3++;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(jtf2、getText()、equals(jt、getValueAt(list-3, 2))) {//要访问得页面刚好在cache1中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), "", "", "命中"});time1++;time2 = 0;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else {//要访问得页面不在cache块中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jtf2、getText(), "", "装入"});time1++;time2++;time3 =0;time4++;count++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");}break;case 3://cache块中装入三个页面得情况if(jtf2、getText()、equals(jt、getValueAt(list-3, 1))) {//要访问得页面刚好在cache0中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), "", "命中"});time1 = 0;time2++;time3++;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(jtf2、getText()、equals(jt、getValueAt(list-3, 2))) {//要访问得页面刚好在cache1中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), "", "命中"});time1++;time3++;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(jtf2、getText()、equals(jt、getValueAt(list-3, 3))) {//要访问得页面刚好在cache2中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), "", "命中"});time1++;time2++;time3 = 0;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");}else {//要访问得页面不在cache块中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), jtf2、getText(), "装入"});time1++;time2++;time3++;time4 = 0;count++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");}break;}} else {//四个cache块都装满得情况if(jtf2、getText()、equals(jt、getValueAt(list-3, 1))) {//要访问得页面刚好在cache0中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), jt、getValueAt(list-3, 4), "命中"});System、out、println(1);time1 = 0;time2++;time3++;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(jtf2、getText()、equals(jt、getValueAt(list-3, 2))) {//要访问得页面刚好在cache1中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), jt、getValueAt(list-3, 4), "命中"});System、out、println(2);time1++;time2 = 0;time3++;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(jtf2、getText()、equals(jt、getValueAt(list-3, 3))) {//要访问得页面刚好在cache2中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), jt、getValueAt(list-3, 4), "命中"});System、out、println(3);time1++;time2++;time3 = 0;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(jtf2、getText()、equals(jt、getValueAt(list-3, 4))) {//要访问得页面刚好在cache3中dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), jt、getValueAt(list-3, 4), "命中"});System、out、println(4);time1++;time2++;time3++;time4 = 0;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");}else {//要访问得页面不在cache块中if(time1>time2 && time1>time3 && time1>time4) {//如果cache0得页面最长时间没有被访问,新页面置换cache0中页面dtm、addRow(new Object[]{jtf2、getText(), jtf2、getText(), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), jt、getValueAt(list-3, 4), "置换"});time1 = 0;time2++;time3++;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(time2>time1 && time2>time3 && time2>time4) {//如果cache1得页面最长时间没有被访问,新页面置换cache1中页面dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jtf2、getText(), jt、getValueAt(list-3, 3), jt、getValueAt(list-3, 4), "置换"});time1++;time2 = 0;time3++;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(time3>time1 && time3>time2 && time3>time4) {//如果cache2得页面最长时间没有被访问,新页面置换cache2中页面dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jtf2、getText(), jt、getValueAt(list-3, 4), "置换"});time1++;time2++;time3 = 0;time4++;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");} else if(time4>time1 && time4>time2 && time4>time3) {//如果cache3得页面最长时间没有被访问,新页面置换cache3中页面dtm、addRow(new Object[]{jtf2、getText(), jt、getValueAt(list-3, 1), jt、getValueAt(list-3, 2), jt、getValueAt(list-3, 3), jtf2、getText(), "置换"});time1++;time2++;time3++;time4 = 0;jtf2、setText("");jlabel2、setText("请输入第" + list + "个访问页面:");}}}}}}实验总结体系结构属于计算机整个得结构,涉及计算机得整个结构,从底层到高层,每层得原理,结构及实现,就是一门比较抽象得学科,通过这次得几个实验,让我对计算机得编码与页面得替换算法有了更深层次得理解。