计算机体系结构实验报告.docx

上传人:b****1 文档编号:2476951 上传时间:2022-10-30 格式:DOCX 页数:14 大小:65.48KB
下载 相关 举报
计算机体系结构实验报告.docx_第1页
第1页 / 共14页
计算机体系结构实验报告.docx_第2页
第2页 / 共14页
计算机体系结构实验报告.docx_第3页
第3页 / 共14页
计算机体系结构实验报告.docx_第4页
第4页 / 共14页
计算机体系结构实验报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算机体系结构实验报告.docx

《计算机体系结构实验报告.docx》由会员分享,可在线阅读,更多相关《计算机体系结构实验报告.docx(14页珍藏版)》请在冰豆网上搜索。

计算机体系结构实验报告.docx

计算机体系结构实验报告

中南大学

 

计算机体系结构

实验报告

 

学生姓名

学院信息科学与工程学院

专业班级

完成时间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]=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1