计算机组成与设计课内实验指导
计算机组成与设计课内实验指导实验一可执行程序的生成(第1章)一、实验目的:通过了解高级语言源程序和目标机器代码的不同表示及其相互转换,深刻理解高级语言和机器语言之间的关系,以及机器语言和不同体系结构之间的关系。二、实验要求:对教材1.4.5节给出的源程序进行编译、链接,最终生成可执行目标代码。三、实验步骤:1 .在Windo野境下用任意一个编辑器编写程序,拷贝到E:OpenMIPS目录下。2 .将Windo野境下源程序拷贝到虚拟机/home/目录下。(1)打开VisualBox,界面如图1所示。图1VisualBox主界面(2)双击OpenRISC_Ubunt图标,启动虚拟机,界面如图2所示。(3)打开命令终端,如图3所示,在命令行输入sudomount-tvboxsfOpenMIPS/mnt/回车,输入openrisc密码,然后打开虚拟机左上角文件夹,按照目录层次打开/mnt/文件夹,将/mnt下的源程序拷贝到当前(/home/)目录下。OpenCores.org加曲唯M明VbMl的1际。算LWAAl 1 OpelWlSC 0FP&A sfcw4l3pn*CTSUrit g Mp4 昵M抑4dAMHiuMaEcmEF二口口OpenRISC processor SoC platformProvided by:图2虚拟机桌面cpenri5dD0penrts-VirtuaLB&xzepcnrsc1opsn.riz.="Virtus1Bex:-$,图3命令终端3 .在虚拟机环境下将编译为MIPS匚编程序。(1)在命令行输入mips,在连按两次Tab®,看到如图4所示的mips编译工具列表。openriEC-Viztiia mips sde elf-addirZIlneiFnip3-ad«-« L f-ariEnlpB-sd-e-elf-adtps -fl d-e -e If-e * +inipi-idA-41 f-ct + fiii.:icrilpc-ede-elf-c unv-imips-sd-e-1 f - cpp1rhl fsi, . M d-c - q1 £寸曾*iirlps-sdemipc"Edo-c Lf-gdht ulirips-sde-e If - IdHi 士 J:: *二 d.« 一 IE - Ji面sii© 息-Sid 电-#lf-ob jc spy Eiipa -sdis-c 1 f - o-b j d uinp aip e - sae -elf-ran,l lb mips -sdie- If-reads 1 f nipc-cda-a 1 f- run,sips-sde-elf-alaeis0xopeiixivlstuoLiacxi -s 加l_p目.mdg-eIf |nips-sd e-e1f-st r i n g e ±iljps£*sdiQ"-a 1 £ - s 11 a_p图4MIPS编译工具(2)如查看mips-sde-elf-gcc命令使用说明,只要在命令行输入mips-sde-elf-gcc-help。(3)编译源程序为汇编代码:在命令行输入mips-sde-elf-gcc-S回车即可,在当前目录下就生成汇编程序。4 .将汇编程序汇编为二进制机器代码:在命令行输入mips-sde-elf-as-mips32-o回车即可,在当前目录下就生成目标代码。5 .进行链接成可执行目标文件。将(/opt/mips-sde-elf/lib)安装目录下的文件拷贝到当前(/home/)目录下,在命令行输入mips-sde-elf-ld-T-o,止匕命令如有问题,用gcc直接编译、汇编、链接成可执行文件,即在命令行输入mips-sde-elf-gcc-T-o即可。6 .在命令行输入mips-sde-elf-run即可看到运行结果。7 .在虚拟机环境下查看编译、汇编、链接后的结果。例如在命令行输入cat即可看到编译结果。8 .同时在命令行输入mips-sde-elf-objdump-S即可看到反汇编代码段和数据段四、实验报告:1 .说明你做实验的过程(重要步骤用屏幕截图表示)。2 .给出源程序(文本文件)的内容(用十六进制形式表示)。3 .给出可执行目标文件(二进制文件)的内容(用十六进制形式表示)。4 .分析或回答下列问题。(1)分析同一个源程序在不同机器上生成的可执行目标代码是否相同。(2)你能在可执行目标文件中找出函数printf()对应的机器代码段吗?能的话,请标示出来。(3)为什么源程序文件的内容和可执行目标文件的内容完全不同?实验二数据表示和运算(第2、3章)一、实验目的:1. 通过无符号数和带符号整数之间的相互转换来理解无符号数和补码整数的表示。2. 了解IEEE754浮点数在机器中的应用,特别是一些特殊值的处理。3. 了解数据在机器中的存放方式。4. 了解高级语言中数据类型的转换和移位操作结果,从而能更好地理解指令系统设计和计算机硬件设计所需满足的要求和需要考虑的问题。5. 通过检查高级语言中数据运算的不同结果,进一步理解机器代码在CPU中的执行过程,从而为更好地学习指令系统设计和CPU设计打下良好的基础。二、实验要求:1. 验证教材表中的关系表达式的结果,并编程得出第二章习题8的表中结果。2. 通过编程得出float和double类型的精度(即十进制有效位的位数)。3. 编程检查“0”、“sqrt()”的运算结果。4. 检查你的机器是大端方式还是小端方式,检查内存变量(如结构或数组)是否按边界对齐。5. 编程实现以下各种操作,分别用十进制和十六进制形式打印输出各种操作的结果:( 1) 给定一个short型数据-12345,分别转换为int、unsignedshort、unsignedint、float类型的数据;( 2) 给定一个int型数据47,分别转换为short、unsignedshort、unsignedint、float类型的数据;(3)给定一个float型数据,转换成double型数据;(4)给定一个double型数据,转换成float型数据;( 5) 按short和unsignedshort类型分别对-12345进行左移2位和右移2位操作。6. 编程计算下列表达式的值,分别用十进制和十六进制形式显示各种操作的结果:( 1) unsignedint型数据:1+95=?;=?( 2) int型数据:47+1=?;-2=?( 3) float型数据:+=?;+(-)=?三、实验步骤:1 .编写相关运算的C源代码。2 .打开命令终端,在命令行输入sudomount-tvboxsfOpenMIPS/mnt/回车,输入openrisc密码,然后打开虚拟机左上角文件夹,按照目录层次打开/mnt/文件夹,将/mnt下的C源程序拷贝到当前(/home/)目录下。3 .在命令行输入mips-sde-elf-gcc-T*c-o*om生成可执行文件。4在命令行输入mips-sde-elf-run*.om检查相关程序运行结果。5 .按照实验一中相应操作,对C源程序进行编译、汇编、链接以及可执行代码的反汇编,分析相关数据在计算机内部的表示和运算过程。四、实验报告:1. 说明你做实验的过程(重要步骤用屏幕截图表示)。2. 分析或回答下列问题。( 1) 在虚拟机上,-1用int类型和unsigedint类型表示的结果分别是多少?( 2) float类型和double类型的精度各是多少?(3)无符号数和带符号整数的扩展操作方式是否相同?各是如何进行的?( 4) 补码整数(如int型数)是否总能转换为等值的float类型数据?为什么?( 5) float型数据是否总能转换成等值的double型数据?为什么?( 6) 长数被截断成短数后可能发生什么现象?为什么?( 7) 将某一源程序生成的可执行文件反汇编,分析反汇编代码并和编译生成的汇编代码进行比较。实验三cache和程序访问的局部性(第4章)、实验目的:1. 通过实际程序的执行,理解“存储程序”工作方式的自动执行过程。2. 通过检查实际程序的存储空间,了解数据的存储和排列顺序。3. 通过实际程序的执行结果,了解程序访问的局部性对带有cache的计算机系统性能的影响。二、实验要求:1.将helloworld程序编译为汇编程序在QtSpim莫拟器上运行。2编写以下程序,修改或添加必要的语句(如计时函数等),以计算和打印主体程序段的执行时间。分别以M=100000,N=10、M=1000,N=1000、M=10,N=100000,执行程序用口程序B,以比较两个程序执行时间的长短。程序段A:a_r(intM,intN)inti,j,aMN;for(i=0;i<M;i+)for(j=0;j<N;j+)aij=i+j;程序段B:a_c(intM,intN)inti,j,aMN;for(j=0;j<N;j+)for(i=0;i<M;i+)aij=i+j;三、实验步骤:1 .将hello汇编程序,在QtSpim莫拟环境下运行,检查机器是大端方式还是小端方式以及内存变量(如结构或数组)是否按边界对齐。2 .将程序程序段A口B在实验一的基础上编译为汇编语言。3 .按照附录AMIPSsim的指令列表、附录CMIPSsim的汇编语言文档要求修改汇编程序,适合MIPSsim模拟环境。4 .按照MIPSsim>用说明在MIPSsm真拟环境下单步运行并检查内存空间。四、实验报告:1. 说明你做实验的过程(重要步骤用屏幕截图表示)和执行结果。2. 对实验结果进行分析,说明局部数据块大小、数组访问顺序等和执行时间之间的关系。五、附录:模拟器安装对于SPIM可以将QtSpim_9.1.7_Windows解压到某一目录下,然后单击或者文件,默认设置直接安装。模拟器安装对于MIPSsim,需要安装Microsoft.NETFramework!#(),然后直接运行即实验四程序的机器级表示及其过程调用(第5章)、实验目的:1 .理解MIPS1用寄存器的使用。2 .学会使用MIPS匚编语言编写简单的程序。3 .理解高级语言过程调用的机器代码表示及其执行过程。二、实验要求:对教材例高级语言通过手工”换或交叉编译器编译为MIPSE编程序,然后在QtSpim莫拟器上单步运行,分析堆栈使用情况和过程调用执行过程。三、实验步骤:1 .在Windo野境下用任意一个编辑器将例子中的C语言程序补充完整。2 .结合书中给出的子函数汇编,将C§言程序手工转换为MIPST编语言。3 .在QtSpim莫拟器单步执行,查看通用寄存器和内存空间的变化。四、实验报告:1. 说明你做实验的过程(重要步骤用屏幕截图表示)和执行结果。2. 对实验结果进行分析,程序调用过程中三个子函数的栈指针、帧指针等寄存器内容以及堆栈的内容的异同。五、附录:+汇编指令基础。常用指令。实验五机器指令执行过程(第6章)、实验目的:1. 了解数据通路的设计。2. 了解控制器的设计。3. 理解机器指令的执行过程。二