- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机体系结构实验课案
计算机体系结构
实验报告
班级:计科0905班
姓名:肖军
学号:0909091823
实验一
对指令操作码进行霍夫曼编码实验目的???了解和掌握指令编码的基本要求和基本原理?二、实验内容?1.?使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。与扩展操作码和等长编码进行比较。?问题描述以及问题分析:?我们举例说明此问题,例如:?有一组指令的操作码共分七类,它们出现概率如?????下表所示:????P1?P2?P3?P4?P5?P6?P7?0.45?0.30?0.15?0.05?0.03?0.01?0.01???????对此组指令进行HUFFMAN?编码正如下图所示:??????????????????????????????????????????????图1????????????????最后得到的HUFFMAN?编码如下表所示:??????????????P1?P2?P3?P4?P5?P6?P7?0?10?110?1110?11110?111110?111111?1?2?3?4?5?6?6?最短编码长度为:???H=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?树进行中序遍历即可完成编码工作观察上图1,不难看出构造HUFFMAN?树所要做的工作:1、先对各指令操作码的出现概率进行排序,构造一个有序链表。2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此两个节点。3、在对链表进行排序,链表是否只有一个节点,是则HUFFAN?树构造完毕,否则继续做2?的操作。为此设计一个工作链表(链表的元素时类,此类的功能相当结构。)、HUFFMAN?树节点、HUFFMAN?编码表节点。具体如下:?//huff_man?tree?point;?class?huff_p{?public:???????huff_p*?r_child;??//大概率的节点,即右子节点;???????huff_p*?l_child;??//小概率的节点,即左子节点;????c?har?op_mask[3];???//指令标号;????float?p;????????//指令使用概率;?};?//work?link?point?class?f_min_p{?public:??f_?min_p*?next;?????c?har?op_mask[3];???//指令标号;??float?p;????????//指令使用概率;??huf?f_p*?huf_p;?};?/huff_man?code?point?class?huff_code{?public:???huff_code*?next;???float?p;???char?op_mask[3];??????char?code[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);//在工作链表中删除最小概率节点函数。?void?insert?_n(f_min_p*?h,f_min_p*?p);//??在工作链表中插入两个最小概率节点生成的节点函数。?huff_p*??cr?eat_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_huffman(huff_code*?head);//输出huffman?编码;?void?cal_sort_length(huff_code*?he
文档评论(0)