《计算机系统基础》实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机系统基础》指导书
Introduction to Computer Systems
实验1 数据的表示
实验序号:1 实验名称:数据的表示
适用专业:计算机科学与技术学时数:2学时
1、实验目的
熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。
2、实验内容
1.“-2 < 2”和“-2 < 2u”的结果一样吗?为什么?请编写程序验证。
2.运行下图中的程序代码,并对程序输出结果进行分析。
3.运行下列代码,并对输出结果进行分析。
#include
void main()
{
union NUM
{
int a;
char b[4];
} num;
num.a = 0x12345678;
printf("0x%X\n", num.b[2]);
}
4.请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少?编写一段
程序代码并进行编译,观察默认情况下,编译器是否报warning。如果有warning 信息的话,分析为何会出现这种warning信息。
int a = 2147483648;
int b = -2147483648;
int c = 2147483649;
unsigned short d = 65539;
short e = -32790;
5.编译运行以下程序,并至少重复运行3次。
void main()
{
double x=23.001, y=24.001, z=1.0;
for (int i=0; i<10; i++) {
if ((y-x)==z)
printf("equal\n");
else
printf("not equal\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 –o SAMPLE.S SAMPLE.C
gcc –g –o SAMPLE.O SAMPLE.C
3. 用GDB跟踪执行SAMPLE。
gdb SAMPLE
4. 观察程序执行情况并记录运行结果。
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 -o main main.c bubblesort.c add.c printresult.c
(2) 首先生成可重定位目标文件(.o 文件),再链接成可执行文件。
首先,使用gcc –c …… 命令将所有.c 文件编译成.o 文件(可以用-o 选项命名
输出的可重定位目标文件),然后再用ld 命令进行链接,以生成可执行目标
文件。
(用ld命令链接时要包含很多系统库,可以用gcc –v main.c来查看系统链接需
要哪些库,把collect2 换成ld,生成的/tmp/ccBCU0rh.o 即为mian.c 编译出来
的main.o 文件,删掉该句替换成以下命令:-o main main.o bubblesort.o add.o
printresult.o -e main)
ld -o main main.o bubblesort.o add.o printresult.o -e main --sysroot=/ --build-id --eh-frame-hdr -m elf_i386 --hash-style=gnu --as-needed -dynamic-linker /lib/ld-linux.so.2 –z relro
/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 上述过程如下图所示: