金陵科技学院·计算机工程学院《计算机系统基础》指导书IntroductiontoComputerSystems实验1数据的表示实验序号:1实验名称:数据的表示适用专业:计算机科学与技术学时数:2学时1、实验目的熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。2、实验内容1.“-22”和“-22u”的结果一样吗?为什么?请编写程序验证。2.运行下图中的程序代码,并对程序输出结果进行分析。3.运行下列代码,并对输出结果进行分析。#includestdio.hvoidmain(){unionNUM{inta;charb[4];}num;num.a=0x12345678;printf(0x%X\n,num.b[2]);}4.请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少?编写一段程序代码并进行编译,观察默认情况下,编译器是否报warning。如果有warning信息的话,分析为何会出现这种warning信息。inta=2147483648;intb=-2147483648;intc=2147483649;金陵科技学院·计算机工程学院unsignedshortd=65539;shorte=-32790;5.编译运行以下程序,并至少重复运行3次。voidmain(){doublex=23.001,y=24.001,z=1.0;for(inti=0;i10;i++){if((y-x)==z)printf(equal\n);elseprintf(notequal\n);x+=z;y+=z;printf(%d,%f,%f\n”,i,x,y);}}要求:(1)给出每次运行的结果截图。(2)每次运行过程中,是否每一次循环中的判等结果都一致?为什么?(3)每次运行过程中,每一次循环输出的i、x和y的结果分别是什么?为什么?3、实验步骤1.进入linux系统,在shell终端的提示符后输入gedit,编写C语言源程序。gedit输入实验内容1的源程序并以SAMPLE.C为文件名将文件存盘。2.用GCC对源文件SAMPLE.C进行编译并产生目标文件SAMPLE.O,汇编语言程序SAMPLE.S。gcc–s–oSAMPLE.SSAMPLE.Cgcc–g–oSAMPLE.OSAMPLE.C3.用GDB跟踪执行SAMPLE。gdbSAMPLE4.观察程序执行情况并记录运行结果。5.依照上述四个步骤,完成对其余实验内容的操作。4、实验思考题1.完成书上第二章习题中第40题,提交代码,并在程序中以十六进制形式打印变量u的机器数。金陵科技学院·计算机工程学院实验2排序程序的编辑、编译和调试实验序号:2实验名称:排序程序的编辑、编译和调试适用专业:计算机科学与技术学时数:2学时1、实验目的熟悉开发环境、掌握开发和调试的基本过程以及工具。2、实验内容以下程序实现了排序和求和算法,程序源码如下图所示。请根据提供的图片输入源程序文件,并保存为相应的.c和.h文件,然后进行编译、链接,调试。bubblesort.h:bubblesort.c:add.h:add.c:金陵科技学院·计算机工程学院printresult.h:printresult.c:main.c:金陵科技学院·计算机工程学院3、实验步骤1.进入linux系统,在shell终端的提示符后输入gedit,编写C语言源程序。2.将源程序文件进行预处理、编译、汇编和链接,以生成可执行文件。(1)使用gcc直接生成可执行文件gcc-omainmain.cbubblesort.cadd.cprintresult.c(2)首先生成可重定位目标文件(.o文件),再链接成可执行文件。首先,使用gcc–c……命令将所有.c文件编译成.o文件(可以用-o选项命名输出的可重定位目标文件),然后再用ld命令进行链接,以生成可执行目标文件。(用ld命令链接时要包含很多系统库,可以用gcc–vmain.c来查看系统链接需要哪些库,把collect2换成ld,生成的/tmp/ccBCU0rh.o即为mian.c编译出来的main.o文件,删掉该句替换成以下命令:-omainmain.obubblesort.oadd.oprintresult.o-emain)ld-omainmain.obubblesort.oadd.oprintresult.o-emain--sysroot=/--build-id--eh-frame-hdr-melf_i386--hash-style=gnu--as-needed-dynamic-linker/lib/ld-linux.so.2–zrelro/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crt1.o/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crti.o/usr/lib/gcc/i686-linux-gnu/4.8/crtbegin.o-L/usr/lib/gcc/i686-linux-gnu/4.8-L/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu-L/usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib-L/lib/i386-linux-gnu-L/lib/../lib-L/usr/lib/i386-linux-gnu-L/usr/lib/../lib-L/usr/lib/gcc/i686-linux-gnu/4.8/../../..–lgcc--as-needed-lgcc_s--no-as-needed-lc-lgcc--as-needed-lgcc_s--no-as-needed/usr/lib/gcc/i686-linux-gnu/4.8/crtend.o/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crtn.o上述过程如下图所示:金陵科技学院·计算机工程学院3.使用OBJDUMP命令进行反汇编(请自行查阅OBJDUMP命令的使用方法)例如,可使用“objdump–S”命令进行反汇编objdump–Smain.o:将main.o进行反汇编4.使用GDB命令进行各种调试(GDB命令参见教材附录C,也可自行查阅网上相关文档)调试之前首先用“gcc–g”命令生成调试信息,否则调试失败。gcc-g-omainmain.cbubblesort.cadd.cprintresult.cgdbmain要求用各种GDB命令对程序进行调试(例如用inforegisters查看寄存器内容)。4、实验思考题1.分析同一个源程序在不同机器上生成的可执行目标代码是否相同。提示:从多个方面(如ISA、OS和编译器)来分析。2.你能在可执行目标文件中找出函数printf()对应的机器代码段吗?能的话,请标示出来。3.为什么源程序文件的内容和可执行目标文件的内容完全不同?制订人:朱俊(制订日期:2016年08月)审订人:(审订日期:2016年08月)