《《計(jì)算機(jī)系統(tǒng)基礎(chǔ)》實(shí)驗(yàn)指導(dǎo)書(shū)(共7頁(yè))》由會(huì)員分享,可在線閱讀,更多相關(guān)《《計(jì)算機(jī)系統(tǒng)基礎(chǔ)》實(shí)驗(yàn)指導(dǎo)書(shū)(共7頁(yè))(7頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、精選優(yōu)質(zhì)文檔-----傾情為你奉上
《計(jì)算機(jī)系統(tǒng)基礎(chǔ)》指導(dǎo)書(shū)
Introduction to Computer Systems
實(shí)驗(yàn)1 數(shù)據(jù)的表示
實(shí)驗(yàn)序號(hào):1 實(shí)驗(yàn)名稱(chēng):數(shù)據(jù)的表示
適用專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 時(shí) 數(shù):2學(xué)時(shí)
1、實(shí)驗(yàn)?zāi)康?
熟悉數(shù)值數(shù)據(jù)在計(jì)算機(jī)內(nèi)部的表示方式,掌握相關(guān)的處理語(yǔ)句。
2、實(shí)驗(yàn)內(nèi)容
1. “-2 < 2”和“-2 < 2u”的結(jié)果一樣嗎?為什么?請(qǐng)編寫(xiě)程序驗(yàn)證。
2. 運(yùn)行下圖中的程序代碼,并對(duì)程序輸出
2、結(jié)果進(jìn)行分析。
3. 運(yùn)行下列代碼,并對(duì)輸出結(jié)果進(jìn)行分析。
#include
void main()
{
union NUM
{
int a;
char b[4];
} num;
num.a = 0x;
printf("0x%X\n", num.b[2]);
}
4. 請(qǐng)說(shuō)明下列賦值語(yǔ)句執(zhí)行后,各個(gè)變量對(duì)應(yīng)的機(jī)器數(shù)和真值各是多少?編寫(xiě)一段程序代碼并進(jìn)行編譯,觀察默認(rèn)情況下,編譯器是否報(bào)warning。如果有warning信息的話,分析為何會(huì)出現(xiàn)這種warning信息。
int a
3、 = ;
int b = -;
int c = ;
unsigned short d = 65539;
short e = -32790;
5. 編譯運(yùn)行以下程序,并至少重復(fù)運(yùn)行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,
4、 %f , %f\n”, i, x, y);
}
}
要求:
(1)給出每次運(yùn)行的結(jié)果截圖。
(2)每次運(yùn)行過(guò)程中,是否每一次循環(huán)中的判等結(jié)果都一致?為什么?
(3)每次運(yùn)行過(guò)程中,每一次循環(huán)輸出的i、x和y的結(jié)果分別是什么?為什么?
3、實(shí)驗(yàn)步驟
1. 進(jìn)入linux系統(tǒng),在shell終端的提示符后輸入gedit,編寫(xiě)C語(yǔ)言源程序。
gedit
輸入實(shí)驗(yàn)內(nèi)容1的源程序并以SAMPLE.C為文件名將文件存盤(pán)。
2. 用GCC 對(duì)源文件SAMPLE.C進(jìn)行編譯并產(chǎn)生目標(biāo)文件SAMPLE.O,匯編語(yǔ)言程序SAMPLE.S。
gcc –s –o SAMPLE.S
5、 SAMPLE.C
gcc –g –o SAMPLE.O SAMPLE.C
3. 用GDB跟蹤執(zhí)行SAMPLE。
gdb SAMPLE
4. 觀察程序執(zhí)行情況并記錄運(yùn)行結(jié)果。
5. 依照上述四個(gè)步驟,完成對(duì)其余實(shí)驗(yàn)內(nèi)容的操作。
4、實(shí)驗(yàn)思考題
1. 完成書(shū)上第二章習(xí)題中第40題,提交代碼,并在程序中以十六進(jìn)制形式打印變量u的機(jī)器數(shù)。
實(shí)驗(yàn)2 排序程序的編輯、編譯和調(diào)試
實(shí)驗(yàn)序號(hào):2 實(shí)驗(yàn)名稱(chēng):排序程序的編輯、編譯和調(diào)試
適用專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 時(shí) 數(shù):2學(xué)時(shí)
1、實(shí)驗(yàn)?zāi)康?
6、熟悉開(kāi)發(fā)環(huán)境、掌握開(kāi)發(fā)和調(diào)試的基本過(guò)程以及工具。
2、實(shí)驗(yàn)內(nèi)容
以下程序?qū)崿F(xiàn)了排序和求和算法,程序源碼如下圖所示。請(qǐng)根據(jù)提供的圖片輸入源程序文件,并保存為相應(yīng)的.c 和.h 文件,然后進(jìn)行編譯、鏈接,調(diào)試。
bubblesort.h:
bubblesort.c:
add.h:
add.c:
printresult.h:
printresult.c:
main.c:
3、實(shí)驗(yàn)步驟
1. 進(jìn)入linux系統(tǒng),在shell終端的提示符后輸入gedit,編寫(xiě)C語(yǔ)言源程序。
2. 將源程序文件進(jìn)行預(yù)處理、編譯、匯編和鏈接,以生成可執(zhí)行文
7、件。
(1) 使用gcc 直接生成可執(zhí)行文件
gcc -o main main.c bubblesort.c add.c printresult.c
(2) 首先生成可重定位目標(biāo)文件(.o 文件),再鏈接成可執(zhí)行文件。
首先,使用gcc –c …… 命令將所有.c 文件編譯成.o 文件(可以用-o 選項(xiàng)命名輸出的可重定位目標(biāo)文件),然后再用ld 命令進(jìn)行鏈接,以生成可執(zhí)行目標(biāo)文件。
(用ld命令鏈接時(shí)要包含很多系統(tǒng)庫(kù),可以用gcc –v main.c來(lái)查看系統(tǒng)鏈接需要哪些庫(kù),把collect2 換成ld,生成的/tmp/ccBCU0rh.o 即為mian.c 編譯出來(lái)的main.o
8、文件,刪掉該句替換成以下命令:-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
9、-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/../li
10、b -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
上述過(guò)程如下圖所示:
3.使用OB
11、JDUMP命令進(jìn)行反匯編(請(qǐng)自行查閱OBJDUMP命令的使用方法)
例如,可使用“objdump –S”命令進(jìn)行反匯編
objdump –S main.o:將main.o進(jìn)行反匯編
4.使用GDB命令進(jìn)行各種調(diào)試(GDB命令參見(jiàn)教材附錄C,也可自行查閱網(wǎng)上相關(guān)文檔)
調(diào)試之前首先用“gcc –g”命令生成調(diào)試信息,否則調(diào)試失敗。
gcc -g -o main main.c bubblesort.c add.c printresult.c
gdb main
要求用各種GDB命令對(duì)程序進(jìn)行調(diào)試(例如用info registers 查看寄存器內(nèi)容)。
4、實(shí)驗(yàn)思考題
1. 分析同一個(gè)源程序在不同機(jī)器上生成的可執(zhí)行目標(biāo)代碼是否相同。
提示:從多個(gè)方面(如ISA、OS 和編譯器)來(lái)分析。
2. 你能在可執(zhí)行目標(biāo)文件中找出函數(shù)printf ()對(duì)應(yīng)的機(jī)器代碼段嗎?能的話,請(qǐng)標(biāo)示出來(lái)。
3. 為什么源程序文件的內(nèi)容和可執(zhí)行目標(biāo)文件的內(nèi)容完全不同?
制訂人: 朱 俊 (制訂日期:2016年08月) 審訂人: (審訂日期:2016年 08 月)
專(zhuān)心---專(zhuān)注---專(zhuān)業(yè)