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

合集下载

中南大学计算机实践报告

中南大学计算机实践报告

中南大学计算机实践报告中南大学计算机实践报告中南大学计算机实践报告一.任务内容要想制作好一个网页,首先要在整体上规划好自己网站的主题和内容,确定自己需要传达给访问用户的主要信息,然后仔细斟酌,把自己所有要表达的意念合情合理地组织起来;其次,是设计一个富有个性的页面式样,务求尽善尽美。

这样制作出来的主页才会清晰、明了、内容充实。

我从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(线性表)实验⼀线性表的操作算法⼀、实验⽬的: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)中南大学软件体系结构实验报告

(完整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

中南大学计算机实践报告.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图标,从左到右依次为代表存储器内容的三栏信息:地址(符号或数字)、命令的十六进制机器代码和汇编命令。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 + "个访问页面:");}}}}}}实验总结体系结构属于计算机整个得结构,涉及计算机得整个结构,从底层到高层,每层得原理,结构及实现,就是一门比较抽象得学科,通过这次得几个实验,让我对计算机得编码与页面得替换算法有了更深层次得理解。

相关文档
最新文档