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