《计算机系统基础》实验指导书
《计算机系统基础》指导书
Introduction to Computer Systems
实验1 数据的表示
实验序号:1 实验名称:数据的表示
适用专业:计算机科学与技术 学 时 数:2学时
1、实验目的
2、实验内容
运行下列代码,并对输出结果进行分析。
#include
void main()
{
union NUM
{
int a;
char b[4];
} num;
num.a = 0
printf("0x%X\n", num.b[2]);
}
请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少?编写一段程序代码并进行编译,观察默认情况下,编译器是否报warning。如果有warning信息的话,分析为何会出现这种warning信息。
int a = 2147483648;
int b = -2147483648;
int c = 2147483649;
unsigned short d = 65539;
short e = -32790;
编译运行以下程序,并至少重复运行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.
gedit
输入实验内容1的源程序并以SAMPLE为文件名将文件存盘。
2. 用 对源文件SAMPLE并产生目标文件SAMPLEO,SAMPLE.S。
–s –o SAMPLE.S SAMPLE.C
gcc –g –o SAMPLE.O SAMPLE.C
3. 用SAMPLE。
gdb SAMPLE
4. 。
5. 依照上述四个步骤,完成对其余实验内容的操作。
实验思考题
实验2 排序程序的编辑、编译和调试
实验序号:2 实验名称:排序程序的编辑、编译和调试
适用专业:计算机科学与技术 学 时 数:2学时
1、实验目的
2、实验内容
以下程序实现了排序和求和算法,程序源码如下图所示。请根据提供的图片源程序文件,并保存为相应的.c 和.h 文件进行编译、链接,调试。
bubblesort.h:
bubblesort.c:
add.h:
add.c:
printresult.h:
printresult.c:
main.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.