中南大学计算机体系结构实验报告.doc
《中南大学计算机体系结构实验报告.doc》由会员分享,可在线阅读,更多相关《中南大学计算机体系结构实验报告.doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、优质文本计算机体系结构实验报告 学 院:信息科学与工程学院 专业班级: 高赛文的小仙女 指导老师: 雷向东 姓 名: igot7 目 录实验 1 对指令操作码进行霍夫曼编码3一、实验目的3二、实验内容3三、实验过程4四、实验结果15实验 2 使用 LRU 方法更新 Cache16一、实验目的16二、 实验内容16 三、实验过程16四、实验结果19实验 3 通道处理过程模拟21一、实验目的21二、实验内容21三、实验过程22四、实验结果23实验 4 单功能流水线调度机构模拟24一、实验目的24二、实验内容24三、实验过程24四、 运行结果25实验总结25实验 1 对指令操作码进行霍夫曼编码一、实
2、验目的1 了解和掌握指令编码的根本要求和根本原理二、实验内容1.使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。与扩展操作码和等长编码进行比拟。 问题描述以及问题分析: 我们举例说明此问题,例如:有一组指令的操作码共分七类,它们出现概率如下表所示:P1P2P3P4P5P6P70.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+
3、0.01*6=-1.95. 要对指令的操作码进行 HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造HUFFMAN 树再进行HUFFAM 编码。此过程的难点构造 HUFFMAN 树,进行 HUFFAM 编码只要对你所生成的 HUFFMAN 树进行中序遍历即可完成编码工作。三、实验过程 观察上图 1,不难看出构造 HUFFMAN 树所要做的工作:1、先对各指令操作码的出现概率进行排序,构造一个有序链表。2、再取出两个最小的概率节点相加,生成一个生的节点参加到链表中,同时从两表中删除此两个节点。3、在对链表进行排序,链表是否只有一个节点,是那么 HUFFAN 树构造完毕,否那么继续做 2
4、 的操作。 为此设计一个工作链表链表的元素时类,此类的功能相当结构。、HUFFMAN 树节点、HUFFMAN 编码表节点。 具体如下:/huff_man tree point;class huff_p public: huff_p* r_child; /大概率的节点,即右子节点; huff_p* l_child; /小概率的节点,即左子节点; char op_mask3; /指令标号; float p; /指令使用概率;;/work link pointclass f_min_ppublic:f_min_p* next; char op_mask3; /指令标号;float p; /指令使用概
5、率;huff_p* huf_p;/huff_man code pointclass huff_codepublic:huff_code*next;float p;char op_mask3; char codeN; /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_m
6、in_p* p);/在工作链表中删除最小概率节点函数。void insert_n(f_min_p* h,f_min_p* p);/ 在工作链表中插入两个最小概率节点生成的节点函数。huff_p* creat_huffp(f_min_p* p);/生成 HUFFMAN 节点。void creat_huffman_code(huff_p* h1,huff_code* h);/生成 huffman 编码;void r_find(huff_p* p1,char code,int i,huff_code* h);/遍历 HUFFMAN 树生成指令操作码的 HUFFMAN 编码。void output_h
7、uffman(huff_code* head);/输出 huffman 编码;void cal_sort_length(huff_code* head);/计算指令用 huffman 编码的平均编码字长程序清单及注释:#include#include #define N 8/find two min program;/huff_man tree pont;class huff_p public: huff_p* r_child; /大概率的节点; huff_p* l_child; /小概率的节点; char op_mask3; /指令标号; float p; /指令使用概率;;class f_
8、min_ppublic:f_min_p* next; char op_mask3; /指令标号;float p; /指令使用概率;huff_p* huf_p;/huff_man codeclass huff_codepublic:huff_code*next;float p;char op_mask3; char codeN; /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
9、);f_min_p* del_min(f_min_p* h,f_min_p* p);void insert_n(f_min_p* h,f_min_p* p);huff_p* creat_huffp(f_min_p* p);void creat_huffman_code(huff_p* h1,huff_code* h);/生成 huffman 编码;void r_find(huff_p* p1,char code,int i,huff_code* h);void output_huffman(huff_code* head);/输出 huffman 编码;void cal_sort_length
10、(huff_code* head);/计算指令用 huffman 编码的平均编码字长void main()f_min_p *h,*h1; huff_p *root;huff_code*head,*pl;inth=input_instruct_set();/*p1=h;while(p1)coutpnext;*/ h1=h; root=creat_huffman_tree(h1); head=new huff_code;head-next=NULL; creat_huffman_code(root,head); output_huffman(head); cal_sort_length(head)
11、; pl=head-next;while(pl)delete head;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; int n; coutn;couth-op_mask;couth-p;intf_min_p* point;f_min_p* p1=head;for(;in-1;i+) point=new f_min_p; coutpoint-op_mask;point-op_mask2=0;coutp
12、oint-p;point-huf_p=NULL;point-next=p1-next;p1-next=point;p1=point;return head;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_hu
13、ffp(min2); comb=new f_min_p; comb-next=NULL; comb-p=rd-p+ld-p; comb-op_mask0=0; comb-op_mask1=0; parent=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; int i=0; coutinext!=NULL) min1=fin_min(h1); if(min
14、1-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);rd=min2-huf_p; comb=new f_min_p; comb-next=NULL; comb-p=rd-p+ld-p; comb-op_mask0=0; comb-op_mask1=0; parent=creat_huffp(comb); if(h1!=NULL)
15、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; cout+inext=NULL)break; delete comb; return head;f_min_p* fin_min(f_min_p* h) f_min_p *h1,*p1; h1=h; p1=h1; float min=h1-p; h1=h1-next; while(h1) if(min(h1-p) min=h1-p;p1=h1; h1
16、=h1-next; return p1; 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; delete p; elsewhile(p1-next!=NULL)p1=p1-next;if(p1=p) p2-next=p1-next;deletebreak; p2=p1; return h; void insert_n(f_min_p *h,f_min_p *p1) p1-next=h-next;h-next=p1;huff_p* creat_huffp(f_min_p* d)h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学计算机 体系结构 实验 报告
限制150内