计算机体系结构实验报告.docx
- 文档编号:2476951
- 上传时间:2022-10-30
- 格式:DOCX
- 页数:14
- 大小:65.48KB
计算机体系结构实验报告.docx
《计算机体系结构实验报告.docx》由会员分享,可在线阅读,更多相关《计算机体系结构实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
计算机体系结构实验报告
中南大学
计算机体系结构
实验报告
学生姓名
学院信息科学与工程学院
专业班级
完成时间2015年10月27日
目录
1.实验内容2
2.实验1:
对指令操作码进行霍夫曼编码3
2.1实验目的3
2.2实验内容3
2.3实验结果3
3.实验2:
使用LRU方法更新Cache3
3.1实验目的3
3.2实验内容4
3.3实验结果4
4.总结4
5.代码附录5
计算机体系结构
1.实验内容
实验1对指令操作码进行霍夫曼编码
实验2使用LRU方法更新Cache
2.实验1:
对指令操作码进行霍夫曼编码
2.1实验目的
了解和掌握指令编码的基本要求和基本原理
2.2实验内容
使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。
与扩展操作码和等长编码进行比较。
要对指令的操作码进行HUFFMAN编码,只要根据指令的各类操作码的出现概率构造HUFFMAN树再进行HUFFAM编码。
此过程的难点构造HUFFMAN树,进行HUFFAM编码只要对你所生成的HUFFMAN树进行中序遍历即可完成编码工作。
2.3实验结果
3.实验2:
使用LRU方法更新Cache
3.1实验目的
了解和掌握寄存器分配和内存分配的有关技术。
3.2实验内容
Cache更新:
结合数据结构的相关知识,使用LRU的策略,对一组访问序列进行内部的LRU置换算法是选择最近最久未使用的页面予以置换。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来经历的时间T,当须淘汰一个页面时,选择现有页面中T值最大的,即最近最久没有访问的页面。
这是一个比较合理的置换算法。
3.3实验结果
4.总结
实验一是曾在学习数字通信原理课程时编写的,当时只有简单的排序后编码的功能,学习了数据结构后,我往里面加入了树的结构,使编码后的结果更加清晰明了了。
学习了计算机体系结构之后,我又往里面加入了求编码长度的功能。
通过这个程序,我更加了解哈夫曼编码的知识了。
实验二是写出LRU算法,这个相对来说比较简单,因为在学习操作系统原理时接触过FIFO等等算法并且编程实现了,难点在于输出结果的排版,一开始我想输出一个表格,这样更符合书上关于此算法的内容,但是出现了各种不对齐的问题,最后只好让它直接输出结果。
通过这几次实验,我发现了自身的不足,比如没有很好的书写习惯,考虑问题不周到,对于计算机体系结构课程中知识的理解不够深入等。
但在编程的过程中我体验到了一分耕耘一分收获的喜悦;多次调试后程序成功运行了,那时候的欢乐是我以前无法想象的。
果然,学习任何一门课程,只要学得用心,都可以从中体会到学习的快乐。
今后我的进步,想必都是从这一点一点敲入编译器的代码中获得的。
5.代码附录
实验1
#include
#include
usingnamespacestd;
#defineN8
classhuff_p{
public:
huff_p*r_child;//大概率的节点;
huff_p*l_child;//小概率的节点;
charop_mask[3];//指令标号;
floatp;//指令使用概率;};
classf_min_p{
public:
f_min_p*next;
charop_mask[3];//指令标号;
floatp;//指令使用概率;
huff_p*huf_p;};
classhuff_code{
public:
huff_code*next;
floatp;
charop_mask[3];
charcode[N];//huffman编码;};
f_min_p*input_instruct_set();//输入指令集子模块;
huff_p*creat_huffman_tree(f_min_p*head);//构造huffman树;
f_min_p*fin_min(f_min_p*h);
f_min_p*del_min(f_min_p*h,f_min_p*p);
voidinsert_n(f_min_p*h,f_min_p*p);
huff_p*creat_huffp(f_min_p*p);
voidcreat_huffman_code(huff_p*h1,huff_code*h);//生成huffman编码;
voidr_find(huff_p*p1,charcode[],inti,huff_code*h);
voidoutput_huffman(huff_code*head);//输出huffman编码;
voidcal_sort_length(huff_code*head);//计算指令用huffman编码的平均编码字长
intmain(){
f_min_p*h,*h1;
huff_p*root;
huff_code*head,*pl;
inti=0;
h=input_instruct_set();
h1=h;
root=creat_huffman_tree(h1);
head=newhuff_code;
head->next=NULL;
creat_huffman_code(root,head);
output_huffman(head);
cal_sort_length(head);
pl=head->next;
while(pl){
deletehead;
head=pl;
pl=pl->next;}}
f_min_p*input_instruct_set(){
f_min_p*head;
f_min_p*h;
h=newf_min_p;
h->next=NULL;
h->huf_p=NULL;
head=h;
intn;
cout<<"请输入指令数:
";
cin>>n;
cout<<"请输入指令标号:
";
cin>>h->op_mask;
cout<<"请输入指令的使用概率:
";
cin>>h->p;
inti=0;
f_min_p*point;
f_min_p*p1=head;
for(;i point=newf_min_p; cout<<"请输入指令标号: "; cin>>point->op_mask; point->op_mask[2]='\0'; cout<<"请输入指令的使用概率: "; cin>>point->p; point->huf_p=NULL; point->next=p1->next; p1->next=point; p1=point;} returnhead;} huff_p*creat_huffman_tree(f_min_p*h){ f_min_p*h1,*min1,*min2,*comb; huff_p*head,*rd,*ld,*parent; h1=h; min1=fin_min(h1); ld=creat_huffp(min1); h1=del_min(h1,min1); if(h1->next) min2=fin_min(h1); else min2=h1; rd=creat_huffp(min2); comb=newf_min_p; comb->next=NULL; comb->p=rd->p+ld->p; comb->op_mask[0]='\0'; comb->op_mask[1]='\0'; parnt=creat_huffp(comb); insert_n(h1,comb); if(h1->next! =NULL) h1=del_min(h1,min2); parent->l_child=ld; parent->r_child=rd; comb->huf_p=parent; head=parent; inti=0; while(h1->next! =NULL){ min1=fin_min(h1); if(min1->huf_p==NULL){ ld=creat_huffp(min1);} else{ ld=min1->huf_p;} h1=del_min(h1,min1); if(h1->next) min2=fin_min(h1); else min2=h1; if(min2->huf_p==NULL){ rd=creat_huffp(min2);} else{ rd=min2->huf_p;} comb=newf_min_p; comb->next=NULL; comb->p=rd->p+ld->p; comb->op_mask[0]='\0'; comb->op_mask[1]='\0'; parent=creat_huffp(comb); if(h1! =NULL) insert_n(h1,comb); if(h1->next! =NULL) h1=del_min(h1,min2); parent->l_child=ld; parent->r_child=rd; comb->huf_p=parent; head=parent; if(h1->next==NULL)break;} deletecomb; returnhead;} f_min_p*fin_min(f_min_p*h){ f_min_p*h1,*p1; h1=h; p1=h1; floatmin=h1->p; h1=h1->next; while(h1){ if(min>(h1->p)){ min=h1->p; p1=h1;} h1=h1->next;} returnp1;} f_min_p*del_min(f_min_p*h,f_min_p*p){ f_min_p*p1,*p2; p1=h; p2=h; if(h==p){ h=h->next; deletep;} else{ while(p1->next! =NULL){ p1=p1->next; if(p1==p){ p2->next=p1->next; deletep; break;} p2=p1;}} returnh;} voidinsert_n(f_min_p*h,f_min_p*p1){ p1->next=h->next; h->next=p1;} huff_p*creat_huffp(f_min_p*d){ huff_p*p1; p1=newhuff_p; p1->l_child=NULL; p1->r_child=NULL; p1->p=d->p; p1->op_mask[0]=d->op_mask[0]; p1->op_mask[1]=d->op_mask[1]; returnp1;} voidr_find(huff_p*p1,charcode[],inti,huff_code*h){ if(p1->l_child){ code[i]='1'; r_find(p1->l_child,code,i+1,h);} if(p1->op_mask[0]! ='\0'){ huff_code*p2=newhuff_code; p2->op_mask[0]=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机体系结构 实验 报告