《计算机系统基础》实验指导书

2018-11-22 21:35

金陵科技学院 · 计算机工程学院

《计算机系统基础》指导书

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(\}

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(\

else

printf(\

x += z;

y += z;

printf(\”, 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 上述过程如下图所示:

金陵科技学院 · 计算机工程学院

3.使用OBJDUMP命令进行反汇编(请自行查阅OBJDUMP命令的使用方法)

例如,可使用“objdump –S”命令进行反汇编 objdump –S main.o:将main.o进行反汇编

4.使用GDB命令进行各种调试(GDB命令参见教材附录C,也可自行查阅网上相关文档)

调试之前首先用“gcc –g”命令生成调试信息,否则调试失败。 gcc -g -o main main.c bubblesort.c add.c printresult.c gdb main

要求用各种GDB命令对程序进行调试(例如用info registers 查看寄存器内容)。

4、实验思考题

1. 分析同一个源程序在不同机器上生成的可执行目标代码是否相同。

提示:从多个方面(如ISA、OS 和编译器)来分析。

2. 你能在可执行目标文件中找出函数printf ()对应的机器代码段吗?能的话,请标

示出来。

3. 为什么源程序文件的内容和可执行目标文件的内容完全不同?

制订人: 朱 俊 (制订日期:2016年08月)

审订人: (审订日期:2016年 08 月)


《计算机系统基础》实验指导书.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017-2018 年天津市十二区县重点校高考第一次模拟考试地理试卷及

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: