您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 计算机组成实验报告汇总
计算机组成与体系结构实验报告实验项目一一、实验目的通过了解高级语言源程序和目标机器代码的不同表示及其相互转换,深刻理解高级语言和机器语言之间的关系,以及机器语言和不同体系结构之间的关系。二、实验要求:在VC6.0中创建下列源程序#includestdio.hvoidmain(){inti=100;intj=-1;intk;k=i+j;printf(%d,k);}然后对该程序进行编译、链接,最终生成可执行目标代码。三、实验报告1.给出做实验的过程.关键代码如下:2.给出源程序(文本文件)的内容(用十六进制形式表示)。3.给出可执行目标文件(二进制文件)的内容(用十六进制形式表示)。4.VC6.0调试环境:设置断点、单步运行、变量的值(十进制、十六进制)、变量的地址、变量的存储。断点设置如下:变量的值十进制:变量的值十六进制:变量的地址:5.VC6.0反汇编:查看源程序对应的汇编程序、可执行目标程序的二进制编码、了解如何给变量分配内存、系统函数程序段的调用。6.分析或回答下列问题。(1)分析同一个源程序在不同机器上生成的可执行目标代码是否相同。不相同。因为不同的机器硬件的组成不同,因此同一个源程序在不同的机器上生成的目标文件不同。(2)你能在可执行目标文件中找出函数printf()对应的机器代码段吗?能的话,请标示出来。不能。因为源程序中的printf函数在可执行文件中已转换为机器语言。被翻译的机器语言中有printf函数,但是不知道是从哪一段开始翻译的。(3)为什么源程序文件的内容和可执行目标文件的内容完全不同?源程序文件可以直接编写。可执行文件是被言翻译过后的。四、实验总结和体会:本次实验让我明白了通过vc6.0这个软件编写出来的高级语言源程序与目标机器代码的不同表示及其相互转换,深刻理解了内存的分配与机器码的相关知识,以及机器语言和不同体系结构之间的关系,使得课本上的知识与实验上的知识相结合。实验项目二一、实验目的:1.通过无符号数和带符号整数之间的相互转换来理解无符号数和补码整数的表示。2.了解字符、汉字的机器表示。3.了解IEE754浮点数在机器中的应用,特别是一些特殊值的处理。二、实验要求:1.编写程序分析C语言中不同类型数据在计算机内部的表示。2.验证教材表2.2中的关系表达式的结果,并编程得出第二章习题8的表中结果。3.通过编程得出float和double类型的精度(即十进制有效位的位数):检查“-8.0/0”、“sqrt(-4.0)”的运算结果,并将“-8.0/0”和“-8/0”的运行结果进行比较。三、实验报告:1.分析下列源程序中的变量在机器内是如何表示的,并给出程序的执行结果,要求给出分析过程。#includestdio.hvoidmain(){unsignedshorti=65535;intj=-2147483648;intk=65536;charc1='\n',c2='x';floatx=100.25671;doubley=567.89;char*str=01as计算机\n01as\\;printf(%u\n,j);printf(%f\n,x);printf(%1d\n,y);printf(%s\n,str);printf(%d\n,i*i);}根据实验结果,回答下列问题:(1)你的机器字长多少位?int类型的位数、最小值和最大值各是多少?答:机器字长:32位;int类型位数:32位;最小值:-2147483648;最大值:2147483647(2)在你的机器上,-1用int类型和unsigedint类型表示的结果分别是多少?2.编写程序验证教材表2.2中的关系表达式的结果,并编程得出第二章习题8的表中结果。要求给出分析过程。验证2.2:3.通过编写程序回答下列问题(要求给出分析过程):(1)float类型和double类型的精度各是多少?(即十进制有效位的位数)float精度是8位,double精度是16位。(2)在你的机器上,“负数开方”是如何处理的?(如“-8.0/0”、“sqrt(-4.0)”的运算结果)(3)在你的机器上,整数除0和浮点数除0的运行结果各是什么?为什么会有不同的运行结果?并将“-8.0/0”和“-8/0”的运行结果进行比较。-8/0:-8.0/0:四、实验总结和体会:我了知道了无符号数和带符号整数之间的相互转换来理解无符号数和补码整数的表示,以及一些简单的字符和汉字的机器表示,此外还了解了IEE754浮点数在机器中的应用。实验项目三五、实验目的1.了解数据在机器中的存放方式(存放顺序、对其方式)。2.了解无符号数和带符号整数是如何进行扩展的。3.不同数据类型之间是如何进行转换的。六、实验要求:1.设计一个程序以检验你的机器是大端方式还是小端方式。以及检查内存变量(如结构或数组)是否按边界对其。2.通过编程得出无符号数和带符号整数是如何进行扩展的。3.编写程序说明不同数据类型之间进行转换时在表数范围和精度上的变化。(1)给定一个short型数据-12345,分别转化为int、unsignedshort、unsignedint、float类型的数据;(2)给定一个int型数据2147483647,分别转化为short、unsignedshort、unsignedint、float、double类型的数据;(3)给定一个float型数据123456.789e5,转化成int、double型数据;(4)给定一个double型数据123456.789e5,转化成int、float型数据。七、实验报告1.给出源程序(文本文件)和执行结果。并回答下列问题。(1)你的机器是大端方式还是小端方式?大端方式(2)内存变量是否按照边界对其?2.分析下列源程序中的变量在机器内是如何表示的,以及各变量对应的十进制真值是多少,并说明无符号数和带符号整数的扩展操作方式是否相同?各是如何进行的?要求给出分析过程。#includestdio.hvoidmain(){shortsi=-32768;unsignedshortusi=si;inti=si;unsignedui=usi;}无符号数和带符号整数的扩展操作方式不相同,无符号数扩展高位补0,有符号整数扩展高位补符号位。3.给出源程序(文本文件)和执行结果,并回答下列问题:(1)补码整数(如int型数)是否总能转换为等值的float类型数据?为什么?int型数总能转换为等值的float型数据。因为float型数据的精度比int型数高。(2)float型数据是否总能转换成等值的double型数据?为什么?当float型数据的范围超出了float本来可以表示的精度范围时,float型数据就不能等值的转换为double型。因为double型数据表示的有效位数有12~14位。而float型数据只有5~7位。(3)长数被截断成短数后可能发生什么现象?为什么?当长数超出了短数的表示范围之后,若是被截断成短数,就会造成溢出。4.分析下列源程序的执行结果,并给出分析过程。#includestdio.hvoidmain(){floatx=-1.5e38;floaty=1.5e38;floatz=1.0;inti=(x+y)+z==z+(y+z);printf(%d\n,i);}(x+y)+z这个式子的值为1.0,而x+(y+z)的值并不是1.0而是0,因为x+(y+z)中先计算(y+z),而y=1.5e38,z=1.0浮点数相加需要先对阶,当对阶之后(y+z)就约等于y,所以x+(y+z)得值为0,所以这两个式子的结果是不相等的。实验项目四一、实验目的:1.了解数据的校验机制。*2.掌握海明码校验实施过程(选做)。*3.掌握循环冗余码校验实施过程(选做)。二、实验要求:1.设计一个程序模拟奇偶校验实施过程(提示:主函数、发送函数、传输函数、校验函数)。2.设计一个程序模拟海明码校验实施过程(提示:主函数、发送函数、传输函数、校验函数、纠错函数)。3.设计一个程序模拟循环冗余码校验实施过程(提示:主函数、发送函数、传输函数、校验函数、纠错函数)。三、实验报告:1.给出源程序和执行结果。#includestdio.h#includestdlib.h#includetime.h//校验函数intchecked(intdata){intx=data;intcount=0;while(x){count++;x=x&(x-1);}if(count%2==1)returndata|0x80;elsereturndata;}//随机产生出错位intrandom(intdata){intx,p;time_tt;srand(time(&t));x=rand()%9;printf(产生的随机数为:%d\n,x);if(x){p=data^(1(x-1));}else{p=data;}returnp;}//接收方voidreceived(intdata){intx=data,p,r;x=x&0x7f;p=checked(x);r=p^data;if(r){printf(错误!\n);}else{printf(正确!\n);}}//主函数voidmain(){intdata,p_checked,p_random;printf(请输入数据:);scanf(%d,&data);data=data&0x7f;printf(原始信息为:%02x\n,data);p_checked=checked(data);printf(发送方求出的校验位:%02x\n,p_checked);p_random=random(p_checked);printf(传输出的校验码:%02x\n,p_random);received(p_random);}实验项目六:cache和程序访问的局部性一、实验目的通过实际程序的执行结果,了解程序访问的局部性对带有cache的计算机系统性能的影响。二、实验要求在以下程序中,修改或添加必要的语句(如添加计时函数等),以计算和打印主体程序段(即for循环段)的执行时间。分别以M=10、N=100000;M=1000、N=1000;M=100000、N=10;执行程序A和程序B,以比较两种for循环段执行时间的长短。下列程序中给出的数组a是局部临时变量,分配在栈中,也可改用静态全局变量,或在堆中动态申请空间。程序段Aassign-array-rows(){inti,j;shorta[M][N];……for(i=0;iM;i++)for(j=0;jN;j++)a[i][j]=0;……}程序段Bassign-array-cols(){inti,j;shorta[M][N];……for(j=0;jN;j++)for(i=0;iM;i++)a[i][j]=0;……}三、实验报告:源程序:#includestdio.h#includewindows.h#defineM10#defineN100000/*#defineM100#defineN10000*//*#defineM1000#defineN1000*//*#defineM10000#defineN100#defineM100000#defineN10*/voidassign_array_rows(){inti,j;staticshorta[M][N];//shorta[M][N];LARGE_INTEGERstart,finish,times;QueryPerformanceFrequency(×);QueryPerformanceCounter(&start);for(i=0;iM;i++){for(j=0;jN;j++){a[i][j]=0;}}QueryPerformanceCounter(&finish);printf(行优先:%lf\n,(finish.QuadPart-start.QuadPart)*1.0/times.QuadPart);}voidassign_array_
本文标题:计算机组成实验报告汇总
链接地址:https://www.777doc.com/doc-5963790 .html