《中南大学计算机体系结构实验报告材料》由会员分享,可在线阅读,更多相关《中南大学计算机体系结构实验报告材料(26页珍藏版)》请在金锄头文库上搜索。
1、计算机体系结构实验报告学院:信息科学与工稈学院专业班级:咼赛文的小仙女指导老师:雷向东姓 名:igot7目录实验1 对指令操作码进行霍夫曼编码 3一、实验目的3.二、实验内容3.三、实验过程4.四、实验结果15实验2 使用LRU方法更新Cache 16一、实验目的16二、实验内容16三、实验过程16四、实验结果19实验3 通道处理过程模拟 21一、实验目的21二、实验内容21三、实验过程22四、实验结果23实验4 单功能流水线调度机构模拟 24一、实验目的24二、实验内容24三、实验过程24四、运行结果26实验总结 26实验1对指令操作码进行霍夫曼编码一、实验目的1. 了解和掌握指令编码的基本
2、要求和基本原理二、实验内容1使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及 对指令码的长度进行评价。与扩展操作码和等长编码进行比较。问题描述以及问题分析:我们举例说明此问题,例如: 有一组指令的操作码共分七类,它们出现概率如下表所示:P1 P2 P3 P4 P5 P6 P70.450.300.150.050.030.010.01对此组指令进行 HUFFMAN 编码正如下图所示:PlP2P3P4P5PGP7010110111011110111110mill1234566最后得到的 HUFFMAN 编码如下表所示:最短编码长度为:H=0.45*1+0.30*2+0.1
3、5*3+0.05*4+0.03*5+0.01*6+0.01*6=-1.95.要对指令的操作码进行 HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造HUFFMAN树再进行HUFFAM 编码。此过程的难点构造HUFFMAN 树,进行 HUFFAM 编码只要对你所生成的HUFFMAN 树进行中序遍历即可完成编码工作。三、实验过程观察上图1,不难看出构造 HUFFMAN 树所要做的工作:1、先对各指令操作码的出现概率进行排序,构造一个有序链表。2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此 两个节点。3、 在对链表进行排序,链表是否只有一个节点,是则HU
4、FFAN树构造完毕,否则继续做 2 的操作。为此设计一个工作链表(链表的元素时类,此类的功能相当结构。)、HUFFMAN 树节点、HUFFMAN 编码表节点。具体如下:huff_ma n tree point; class huff_p public:huff_p* r_child; /大概率的节点,即右子节点;huff_p* l_child; char op_mask3; float p;;/work link point/小概率的节点,即左子节点;/指令标号;/指令使用概率;class f_min_ppublic:f_min_p* n ext;char op_mask3; / 指令标号;
5、float p;/指令使用概率;huff_p* huf_p;/huff_ma n code point class huff_code public:huff_code* next; float p;char op_mask3; char codeN;/huffman 编码;函数说明:f_min_p* in put_ in struct_set();输入指令集子模块;huff_p* creat_huffman_tree(f_min_p* head);/构造 huffman树;f_min_p* fin_min(f_min_p* h);/在工作链表中寻找最小概率节点函数。f_min_p* del_
6、mi n(f_min_p* h,f_min_p* p);/在工作链表中删除最小概率节点函数。void in sert_ 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_fin d(huff_p* p1,char code,i nt i,huff_code* h);/遍历 HUFFMAN 树生成指令操作码的HU
7、FFMAN 编码。void output_huffma n( huff_code* head);/ void cal_sort_le ngth(huff_code* head);/输出huffman 编码;计算指令用huffma n编码的平均编码字长程序清单及注释:#in clude#in clude#defi ne N 8/find two min program;/huff_ma n tree pont;class huff_ppublic:huff_p* r_child; huff_p* l_child; char op_mask3; float p;;class f_min_p pub
8、lic:/大概率的节点;小概率的节点;/指令标号;/指令使用概率;f_min_p* n ext;char op_mask3; / 指令标号; float p;/指令使用概率;huff_p* huf_p;huff_ma n codeclass huff_codepublic:huff_code* next;float p;char op_mask3;char codeN;/huffman 编码;;构造 huffman 树;f_min_p* in put_i nstruct_set();输入指令集子模块;huff_p* creat_huffma n_tree(f_min_p* head);/ f_
9、min_p* fin_min(f_min_p* h); f_min_p* del_mi n( f_min_p* h,f_ min_p* p); void in sert_ 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_fin d(huff_p* p1,char code,i nt i,huff_code* h);void output_huffman(huff_code* head)
10、;/输出 huffman编码;void cal_sort_le ngth(huff_code* head);/计算指令用 huffman编码的平均编码字长void mai n()f_min_p *h,*h1;huff_p *root;huff_code*head,*pl;inth=in put_ in struct_set();/*p仁h;while(pl)coutpvv,; p1=p1- n ext;*/h仁h;root=creat_huffma n_tree(h1);head=new huff_code;head- next=NULL;creat_huffma n_code(root,he
11、ad);output_huffma n( head); cal_sort_le ngth(head);pl=head-n ext;while(pl) delete head; head=pl; pl=pl-n ext;f_min_p* in put_ in struct_set() f_min _p* head;f_min_p* h;h=n ewf_ min_p;h- next=NULL; h-huf_p=NULL;head=h;int n;coutvv请输入指令数:; cinn;coutvv请输入指令标号:; cin h-op_mask;coutvv请输入指令的使用概率: cin h-p;i
12、ntf_min_p* point;f_min _p* p仁head;for(;iv n-1;i+)point=new f_min_p;coutvv请输入指令标号: cin po in t-op_mask; poi nt-op_mask2=0;coutvv请输入指令的使用概率: cin poi nt-p;poi nt-huf_p=NULL; point-n ext=p1- n ext;p1- n ext=po int; p1=po int; return head; huff_p* creat_huffma n_tree(f_ min_p* h) f_min_p *h1,*mi n1,*mi n
13、2,*comb; huff_p* head,*rd,*ld,*pare nt;h仁h;min 1=fin_mi n(h1); ld=creat_huffp(mi n1); h1=del_mi n(h1,mi n1);if(h1- next)min 2=fi n_min( hi);elsemin 2=h1; rd=creat_huffp (min 2);comb=new f_min_p; comb-n ext=NULL; comb-p=rd-p+ld-p; comb-op_mask0=0;comb-op_mask1=0;pare nt=creat_huffp(comb);in sert_ n( h1,comb);if(h1- next!=NULL)h1= del_mi n(h1,mi n2);pare nt-l_child=ld; pare nt-r_child=rd;comb-huf_p=pare nt;head=pare nt; int i=0; coutvvivve ndl;while(h1- next!=NULL)min 1=fi n_ mi n(h1);if(mi n1-huf_p=NULL)ld=creat_huffp(mi n1);elseld=min 1-huf_p;h1=del_mi n(h1,mi n1);if(h1- nex